多线程 – 如果我在线程内部使用回调函数与我的应用程序的主线程进行通信,则存在任何缺点吗?

我写了一个Thread.descendent类,并与主线程通信我使用回调函数,所以我想知道是否是一个有效的解决方案,或者我必须使用
Windows消息?

type
   TMyCallBack= procedure(const Param1,Param2: string) of object;
   TMyThread= class(TThread)
   private
    P1 : string;
    P2 : string;
    MyCallBack    : TMyCallBack;
     procedure Process;
   public
     Constructor Create(CallBack : TMyCallBack); overload;
     destructor Destroy; override;
     procedure Execute; override;
   end;

procedure TMyThread.Process;
begin
  FCallBack(P1,P2);    
end;


constructor TMyThread.Create(CallBack : TMyCallBack);
begin
  inherited Create(False);
  FreeOnTerminate := True;
  MyCallBack    := CallBack;
end;

procedure TMyThread.Execute;
begin
    while True and not Terminated do
    begin
     AResult:= FListener.GetResult(Param1,Param2,5000);
      if not VarIsNull(AResult) then
      begin
        P1:=AResult.Value1;
        P2:=AResult.Value2;
        Synchronize(Process);
      end;
    end;
end;

最佳答案 只要你使用Synchronize就可以了.

点赞