[英]Can Control.Invoke() be interrupted?
调用Control.Invoke()
,它将阻塞调用线程,直到处理完消息为止。 我想知道是否可以从另一个线程中突破这个障碍。
注意:我知道我可以使用Control.BeginInvoke()
,但是我没有问这个。
你不能。
等待线程决定唤醒它的条件集。
如果要让选项中断跨线程调用,则可以使用ManualResetEvent
, BeginInvoke
的WaitHandle
和WaitAny
。
请注意,如果您执行此操作,然后使用事件从等待中唤醒,它将不会使跨线程调用出队。 辅助线程根本不会再等待了。
...如果我可以从另一个线程突破这个障碍
Control.Invoke()
将在作为主线程的UI线程上运行。 如果您将其杀死,则将退出该应用程序。
为防止UI线程阻塞时间过长,应仅在Control.Invoke()
中执行仅更新控件的操作。 别的地方应该做其他的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.