作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 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 背后的代码是通过发布的消息实现的 - 而不是 - 从其他线程调用将是安全的,但它不会立即生效。
长话短说 - 您绝对必须通过同步来调用它,这是有充分理由的。
关于delphi - 在 AnonymousThread 中使用 TThread.Synchronize 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32999642/
我在 firemonkey 中搜索执行任务的后台方法时遇到了这段 Delphi 代码。 TThread.CreateAnonymousThread( procedure()
我是一名优秀的程序员,十分优秀!