12

有人可以告诉我何时使用 aDispatcher以及何时使用SynchronizationContext该类吗?

一段时间以来,我一直在使用Dispatcher从后台线程排队任务,然后我发现了SynchronizationContext.

4

2 回答 2

17

AFAIK,当使用 WPF 时,该SynchronizationContext.Current对象的类型DispatcherSynchronizationContext实际上只是 Dispatcher 对象的包装器,而PostandSend方法只是委托给Dispatcher.BeginInvokeand Dispatcher.Invoke

因此,即使您决定使用,SynchronizationContext我认为您最终还是会在幕后调用调度程序。

此外,我认为使用 SynchronizationContext 有点麻烦,因为您必须将对当前上下文的引用传递给需要调用 UI 的所有线程。

于 2010-06-18T15:37:59.827 回答
4
  1. 当您的代码与 WPF 紧密耦合时,请使用 Dispatcher。

  2. 当您需要在“上下文”线程上排队时使用 AsyncOperationManager。这也适用于 Windows 窗体、ASP .NET 和 WCF 应用程序。

  3. 避免自己使用 SynchronizationContext。AsyncOperationManager 在内部使用这种机制。

于 2010-06-18T16:25:27.620 回答