多个Control.BeginInvoke/Invoke调用会按顺序执行吗?

cor*_*raf 13 .net c# invoke begininvoke

我需要知道Control.BeginInvoke和Control.Invoke调用是否会按照调用的顺序执行.

我有以下场景:

  1. UI线程被阻止
  2. WCF线程调用Control.BeginInvoke
  3. WCF线程调用Control.Invoke(或者可能再次使用BeginInvoke)
  4. UI线程已解除阻止
  5. ??

步骤1-4的执行顺序保证按所示顺序排列(从技术上讲,顺序不能保证是这样的,但我所拥有的问题仅在订单如图所示时才相关).

我的问题是,在步骤2中的BeginInvoke调用之前是否有可能执行步骤3中的Invoke/BeginInvoke调用?

另外,请不要评论阻​​止UI线程.

Jef*_*Cyr 10

在您的情况下,步骤2将始终在步骤3之前执行.UI线程上的BeginInvoke将按其排队的顺序执行.

UI线程实际上是一个消息泵,它有一个消息队列,只有一个线程消耗它,所以它保证工作项将按它们排队的顺序执行.

使用Delegate.BeginInvoke,执行顺序可能是非顺序的.