繁体   English   中英

可以中断Control.Invoke()吗?

[英]Can Control.Invoke() be interrupted?

调用Control.Invoke() ,它将阻塞调用线程,直到处理完消息为止。 我想知道是否可以从另一个线程中突破这个障碍。

注意:我知道我可以使用Control.BeginInvoke() ,但是我没有问这个。

你不能。

等待线程决定唤醒它的条件集。

如果要让选项中断跨线程调用,则可以使用ManualResetEventBeginInvokeWaitHandleWaitAny

请注意,如果您执行此操作,然后使用事件从等待中唤醒,它将不会使跨线程调用出队。 辅助线程根本不会再等待了。

...如果我可以从另一个线程突破这个障碍

Control.Invoke()将在作为主线程的UI线程上运行。 如果您将其杀死,则将退出该应用程序。

为防止UI线程阻塞时间过长,应仅在Control.Invoke()中执行仅更新控件的操作。 别的地方应该做其他的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM