有人可以告诉我何时使用 aDispatcher以及何时使用SynchronizationContext该类吗?
一段时间以来,我一直在使用Dispatcher从后台线程排队任务,然后我发现了SynchronizationContext.
有人可以告诉我何时使用 aDispatcher以及何时使用SynchronizationContext该类吗?
一段时间以来,我一直在使用Dispatcher从后台线程排队任务,然后我发现了SynchronizationContext.
AFAIK,当使用 WPF 时,该SynchronizationContext.Current对象的类型DispatcherSynchronizationContext实际上只是 Dispatcher 对象的包装器,而PostandSend方法只是委托给Dispatcher.BeginInvokeand Dispatcher.Invoke。
因此,即使您决定使用,SynchronizationContext我认为您最终还是会在幕后调用调度程序。
此外,我认为使用 SynchronizationContext 有点麻烦,因为您必须将对当前上下文的引用传递给需要调用 UI 的所有线程。
当您的代码与 WPF 紧密耦合时,请使用 Dispatcher。
当您需要在“上下文”线程上排队时使用 AsyncOperationManager。这也适用于 Windows 窗体、ASP .NET 和 WCF 应用程序。
避免自己使用 SynchronizationContext。AsyncOperationManager 在内部使用这种机制。