我需要知道Control.BeginInvoke和Control.Invoke调用是否按照它们被调用的顺序执行.
我有以下情况:
> UI线程被阻止
> WCF线程调用Control.BeginInvoke
> WCF线程调用Control.Invoke(或者可能是BeginInvoke再次)
> UI线程被解除封锁
> ??
步骤1-4的执行顺序保证是按照显示的顺序(技术上,订单不能保证是这样,但是如果订单如图所示,我的问题只有相关).
我的问题是在步骤2中的BeginInvoke调用之前是否有可能在步骤3中调用Invoke / BeginInvoke调用?
另外,请不要评论阻止UI线程.
解决方法
在您的情况下,步骤2将始终在步骤3之前执行.UI线程上的BeginInvoke将按其已排队的顺序执行.
UI线程实际上是一个消息泵,它具有单个消息队列,只有一个线程消耗它,所以保证工作项将按照它们排队的顺序执行.
它与Delegate.BeginInvoke有关,执行顺序可能不是顺序的.