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

标签 c# .net invoke begininvoke

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

我有以下场景:

  1. UI 线程被阻塞
  2. WCF 线程调用 Control.BeginInvoke
  3. WCF 线程调用 Control.Invoke(或可能再次调用 BeginInvoke)
  4. UI 线程未阻塞
  5. ??

步骤 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/

相关文章:

c# - 获取带格式的属性 ToString

c# - 从类中调用随机方法

c# - 如何在xamarin表单中使用SQLite-Net-PCL?

c# - 限制线程数

c# - 如何将 groupBox 的角更改为尖角而不是圆形 C# .NET WPF

c# - 从 MSTest 测试生成可运行的 exe

.net - 重载、覆盖和隐藏?

.net - 有没有办法阻止 Reflector 反射(reflect)我的源代码?

c# - 此代码显示 ol 中的 li 数

c# - 反射和 WCF