相关背景:
我们在做桌面级小程序时,一般的结构是:
- 设计业务对象
- 做工作线程
- 写界面
工作线程主要把业务对象给封装起来,处理时避免前台界面停止响应的情况。
但有时业务对象会有异常,需要反应到前台界面上,这时,我们需要捕获一下线程的异常
type TTrdExceptionDemo=class(TThread) private FException: Exception; procedure DoHandleException; protected procedure Execute; override; procedure HandleException; virtual; end; implementation procedure TTrdExceptionDemo.DoHandleException; begin Application.ShowException(FException) end; procedure TTrdExceptionDemo.Execute; begin FException := nil; try // raise an Exception raise Exception.Create('I raised an exception'); except HandleException; end; end; procedure TTrdExceptionDemo.HandleException; begin FException := Exception(ExceptObject); try Synchronize(DoHandleException); finally FException := nil; end; end; //测试 procedure TForm1.btn1Click(Sender: TObject); begin with TTrdExceptionDemo.Create(True) do begin FreeOnTerminate := True; Resume; end; end;