有人可以告诉我何时使用Dispatcher
以及何时使用SynchronizationContext
类?Dispatcher和SynchronizationContext类
一段时间以来,我一直在使用Dispatcher
排列来自后台线程的任务,然后我发现了SynchronizationContext
。
有人可以告诉我何时使用Dispatcher
以及何时使用SynchronizationContext
类?Dispatcher和SynchronizationContext类
一段时间以来,我一直在使用Dispatcher
排列来自后台线程的任务,然后我发现了SynchronizationContext
。
AFAIK,使用WPF的情况下,SynchronizationContext.Current
目的是DispatcherSynchronizationContext
型实际上是就在分派器对象的包装和Post
和Send
方法只是委托给Dispatcher.BeginInvoke
和Dispatcher.Invoke
的。
因此,即使您决定使用SynchronizationContext
,我认为您最终会在幕后调用调度程序。
此外,我认为使用SynchronizationContext有点麻烦,因为您必须将对当前上下文的引用传递给所有需要调用到UI中的线程。
当代码与WPF紧密耦合时使用Dispatcher。
当您需要在“上下文”线程上对某些内容进行排队时,请使用AsyncOperationManager。这也适用于Windows窗体,ASP .NET和WCF应用程序。
避免自己使用SynchronizationContext。 AsyncOperationManager在内部使用这种机制。
我知道你以前写过这个答案。不过,如果你能够提供一个具体的例子来说明如何使用'AsyncOperationManager'在“context”(UI)线程中排队执行委托,我会非常感兴趣。我知道'SynchronizationContext'是如何工作的;但我无法弄清楚'AsyncOperation'应该如何工作。 (我目前有这样一个概念,它就像是一个记录异步操作状态和进度的“标记”,但不会帮助实际调度委托来执行。) – stakx 2011-01-31 20:07:42
如何使用AsyncOperationManager:http:// www .codeproject.com/KB/cpp/SyncContextTutorial.aspx – jbe 2011-01-31 21:06:02
如果您需要在UI线程上同步运行某些内容,该怎么办? AsyncOperation没有Send()方法,但是SynchronizationContext没有。 – Monstieur 2013-06-07 11:29:58
为什么downvote? – 2010-06-26 09:59:45