我需要知道 Control.BeginInvoke 和 Control.Invoke 调用是否会按照它们被调用的顺序执行。
我有以下场景:
- UI 线程被阻塞
- WCF 线程调用 Control.BeginInvoke
- WCF 线程调用 Control.Invoke(或可能再次调用 BeginInvoke)
- UI 线程未阻塞
- ??
步骤 1-4 的执行顺序保证按照显示的顺序(从技术上讲,顺序不能保证是那样,但我的问题只有在顺序如图所示时才相关)。
我的问题是第 3 步中的 Invoke/BeginInvoke 调用是否有可能在第 2 步中的 BeginInvoke 调用之前执行?
此外,请不要评论阻塞 UI 线程。
最佳答案
在您的情况下,第 2 步将始终在第 3 步之前执行。UI 线程上的 BeginInvoke 将按照排队的顺序执行。
UI 线程实际上是一个消息泵,它有一个消息队列,只有一个线程使用它,因此可以保证工作项将按照它们排队的顺序执行。
Delegate.BeginInvoke 的执行顺序可能是非顺序的。
关于c# - 多个 Control.BeginInvoke/Invoke 调用会按顺序执行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1880870/