zoukankan      html  css  js  c++  java
  • 捕获线程异常

    相关背景:

    我们在做桌面级小程序时,一般的结构是:

    1. 设计业务对象
    2. 做工作线程
    3. 写界面

    工作线程主要把业务对象给封装起来,处理时避免前台界面停止响应的情况。

    但有时业务对象会有异常,需要反应到前台界面上,这时,我们需要捕获一下线程的异常

    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;
    View Code
  • 相关阅读:
    数字校验1
    数字校验
    千分位保留4位小数
    如何把一个字符串格式化位4位一个空格
    from里button会提交表单
    重新学习JavaScript2015年11月3日
    java设计模式之代理模式
    自定义标签 (choose)
    自定义标签 foreach
    获取一个表格的一行的值
  • 原文地址:https://www.cnblogs.com/key-ok/p/3358932.html
Copyright © 2011-2022 走看看