Dispatcher.CurrentDispatcher (在System.Windows.Threading中)和Application.Current.Dispatcher (在System.Windows中)有什么区别?
我的直觉告诉我,Application.Current.Dispatcher永远不会改变,并且对当前应用程序中的所有线程都是全局的,而Dispatcher.CurrentDispatcher可能会创建一个新的Dispatcher实例,这取决于调用它的线程。
对吗?
如果是,Dispatcher.CurrentDispatcher的主要用途是多线程UI吗?
发布于 2012-05-04 21:02:10
我的直觉告诉我,Application.Current.Dispatcher永远不会改变,并且对当前应用程序中的所有线程都是全局的,而Dispatcher.CurrentDispatcher可能会创建一个新的
实例,这取决于调用它的线程。
这是正确的。
此外,从非UI线程访问Dispatcher.CurrentDispatcher没有任何意义。除非您调用Dispatcher.Run,否则它什么也不会做,而且进入无限消息循环也不是您希望在工作线程中执行的操作。
所以:
在最常见的场景中,你的应用程序只有一个UI线程,UI线程中的Application.Current.Dispatcher和Dispatcher.CurrentDispatcher将返回相同的实例。你使用哪一个只是一个简单的preference.
DispatcherObject都将在构造时永久地与创建它的UI线程的调度程序相关联。在这种情况下,Application.Current.Dispatcher将引用您的应用程序派生线程的调度程序;您将无法使用它将消息发送到其他UI线程拥有的控件。发布于 2014-04-30 20:11:30
简单来说..。
Dispatcher.CurrentDispatcher获取当前线程的调度程序。因此,如果您要从后台进程中查找UI线程的分派器,请不要使用此函数。
Application.Current.Dispatcher将始终为您提供UI线程的dispatcher,因为这是启动唯一应用程序实例的线程。
发布于 2012-05-04 20:50:25
我的直觉告诉我,Application.Current.Dispatcher永远不会改变,并且对当前应用程序中的所有线程都是全局的,而Dispatcher.CurrentDispatcher可能会创建一个新的
实例,这取决于调用它的线程。
也就是说,Application.Current.Dispatcher是应用程序的一个实例属性,它在构造时被指定为当前线程的dispatcher。正如Dispatcher.CurrentDispatcher的文档所指出的:
获取当前正在执行的线程的调度器,并创建一个新的调度器(如果还没有与该线程关联的话)。
如果是,Dispatcher.CurrentDispatcher的主要用途是多线程UI吗?
可能,我在获取后台线程的调度器时没有遇到任何用处,因为您通常没有属于它们的UI元素,您可能想要将操作分派到它们。
https://stackoverflow.com/questions/10448987
复制相似问题