从CreateAnonymousThread更新VCL组件

时间:2011-07-18 21:20:16

标签: multithreading delphi delphi-xe

似乎哪个Synchronize无法在使用CreateAnonymousThread创建的主题中使用,所以问题是:How i can update a VCL component from inside of a Thread created using CreateAnonymousThread?

TThread.CreateAnonymousThread(procedure
 begin
  //do something
  UpdateCompnent();//how I can update a VCL component from here?   
 end
).Start;

3 个答案:

答案 0 :(得分:9)

可以在这种情况下使用同步,例如:

TThread.Synchronize(nil, procedure begin UpdateComponent(); end);

如果你想在主线程中执行异步方法调用,你可以使用TThread.Queue,例如:

TThread.Queue(nil, procedure begin UpdateComponent(); end);

答案 1 :(得分:4)

您还可以使用PostMessage安全地排队,或使用SendMessage从匿名线程安全地进行同步。

答案 2 :(得分:1)

您可以使用PostMessage(Form.Handle,WM_UPDATEMYCOMP,0,0);

您可以定义自己的消息ID,wparam,lparam,通过一些工作,您可以将它们转换为更复杂的参数。