我需要知道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一起执行的顺序可能是非顺序的。

    关于c# - 是否将按顺序执行多个Control.BeginInvoke/Invoke调用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1880870/

    10-13 06:56
    查看更多