我在寻找后台方法来执行firemonkey中的任务时遇到了这段Delphi
代码。
TThread.CreateAnonymousThread(
procedure()
begin
Sleep(10000);
TThread.Synchronize(TThread.CurrentThread,
procedure
begin
Button2.Text := 'OK';
end);
end).Start;
在这种情况下真的需要TThread.Synchronize吗?
最佳答案
TButton.Text更改Window对象的属性,该属性本质上是非线程安全的,并且只能从创建它的线程中直接访问,也可以通过消息发送/发布来访问。
TThread.Synchronize所做的是-将过程与可等待的对象包装在一起,将其放入队列,然后在句柄上等待-它将消息发布到主线程以将其唤醒。
如果TButton.Text背后的代码是通过发布的消息实现的,而实际上不是,则可以从其他线程进行调用,但不会立即生效。
长话短说-出于充分的理由,您绝对必须通过Synchronize调用它。
关于delphi - 在AnonymousThread中使用TThread.Synchronize的目的是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32999642/