- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我经常将主窗体句柄传递给其他线程,以便它们可以将消息发回主线程。我在 2013 年 9 月 28 日看到 Remy Lebeau 说:
...the TWinControl.Handle property is not thread-safe, either. You should use the TApplication.Handle property instead, or use AllocateHWnd() to create your own window.
在this answer关于传递字符串的问题。
句柄属性怎么不安全?它会在程序的生命周期内发生变化吗?
最佳答案
How is the
Handle
property not safe?
当您访问Handle
属性时,如果尚未创建窗口句柄,则会按需创建。如果您从 GUI 线程以外的线程访问 Handle
属性,则这意味着您在错误的线程上创建了窗口。
Does it change during the life of the program?
是的,如果重新创建窗口,窗口句柄可以更改。
I routinely pass the main form handle to other threads so that they can post messages back to the main thread.
在这种情况下,您可能不会在主线程之外访问 Handle
属性。听起来(虽然我看不到你的代码)你正在访问主线程上的 Handle
并将该值传递给另一个线程。
但是,窗口娱乐是您的问题。由于您的窗口需要重新创建,因此您根本不能指望该句柄比您的线程还长。很难预测您的窗口是否会被重新创建。 VCL 不会轻易执行娱乐事件。但是,在我看来,安全总比后悔好得多。因此,使用 AllocateHWnd
并控制此窗口的生命周期。
关于multithreading - TForm.Handle 线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31460970/
我是一名优秀的程序员,十分优秀!