有人能告诉我什么时候使用 Dispatcher
,什么时候使用 SynchronizationContext
类吗?
最近我一直在使用 Dispatcher
来排队后台线程的任务,然后我发现了 SynchronizationContext
。
有人能告诉我什么时候使用 Dispatcher
,什么时候使用 SynchronizationContext
类吗?
最近我一直在使用 Dispatcher
来排队后台线程的任务,然后我发现了 SynchronizationContext
。
SynchronizationContext.Current
对象是 DispatcherSynchronizationContext
类型的,它实际上只是 Dispatcher 对象的包装器,并且 Post
和 Send
方法只是委托给 Dispatcher.BeginInvoke
和 Dispatcher.Invoke
方法。SynchronizationContext
,我认为您最终也会在幕后调用 dispatcher。如果您的代码与WPF紧密耦合,请使用Dispatcher。
如果您需要在“上下文”线程上排队某些内容,请使用AsyncOperationManager。这也适用于Windows Forms、ASP .NET和WCF应用程序。
避免自己使用SynchronizationContext。AsyncOperationManager在内部使用此机制。
AsyncOperationManager
将委托排队以在“上下文”(UI)线程上执行,我会非常感兴趣。我知道SynchronizationContext
的工作原理;但我无法弄清楚AsyncOperation
应该如何工作。(我目前的想法是它更像是用于跟踪异步操作状态和进度的“令牌”,但不能帮助实际安排委托执行。) - stakx - no longer contributing