Control.Invoke()可以被中断吗?

时间:2015-04-19 23:00:05

标签: c# .net

调用Control.Invoke()时,它会阻止调用线程,直到消息得到处理。我想知道我是否可以从另一个线程中脱离这个块。

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

2 个答案:

答案 0 :(得分:3)

不,你不能。

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

如果您想要中断跨线程通话选项,可以使用ManualResetEvent,来自WaitHandle的{​​{1}}和BeginInvoke

请注意,如果执行此操作然后使用事件从等待中唤醒,则不会使跨线程调用出列。工作线程不再等待它了。

答案 1 :(得分:0)

  

...如果我可以从另一个线程中突破这个块

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

为防止UI线程阻塞太长时间,您应该只在Control.Invoke()中执行仅更新控件的操作。其他任何事都应该在其他地方完成。