似乎哪个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;
答案 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,通过一些工作,您可以将它们转换为更复杂的参数。