【问题标题】:Does every UI thread have its own dispatcher? [duplicate]每个 UI 线程都有自己的调度程序吗? [复制]
【发布时间】:2015-11-21 20:20:00
【问题描述】:

在 WPF 中,每个调度程序都有自己的线程是真的吗?来自Dispatcher.BeginInvokedescription

在 Dispatcher 所在的线程上异步执行委托 相关联。

我们知道一个调度器最多只能关联一个线程。两个不同的线程可以共享一个调度器吗?如果我理解正确,Dispatcher 是一个控制消息泵的抽象,即应用程序可以向 Dispatcher 发送消息,它负责在其线程上执行它们。如果我错了,请纠正我。

【问题讨论】:

  • 线程和调度程序之间存在一对一的关系。也就是说,多个线程可以在 UI 线程调度程序上排队工作(例如,在 WPF 中,您使用 Application.Current.Disptacher)。如果您想与工作线程中的 UI 元素进行交互,您实际上必须这样做。

标签: c# wpf multithreading


【解决方案1】:

是的。但是,您必须了解可以并且始终只有一个 UI 线程这一事实。由于线程和调度程序之间存在一对一的关系,这意味着(一个)UI 线程只有一个调度程序。

即一个调度程序不能有两个线程关联,因为只有一个 UI 线程。

【讨论】:

    【解决方案2】:

    根据MSDN, Dispatcher.CurrentDispatcher;

    如果 Dispatcher 与当前线程没有关联,则将创建一个新的 Dispatcher。 FromThread 方法不是这种情况。如果没有与指定线程关联的调度程序,FromThread 将返回 null。

    如果您解释该文本,则 Thread 拥有(或与之关联)一个调度程序,并且两者之间的每个关联都是 1-1,因为 Thread 类中没有用于 Dispatcher 的设置器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      • 1970-01-01
      • 2012-04-18
      相关资源
      最近更新 更多