首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dispatcher.CurrentDispatcher与Application.Current.Dispatcher

Dispatcher.CurrentDispatcher与Application.Current.Dispatcher
EN

Stack Overflow用户
提问于 2012-05-04 20:40:07
回答 3查看 58.3K关注 0票数 82

Dispatcher.CurrentDispatcher (在System.Windows.Threading中)和Application.Current.Dispatcher (在System.Windows中)有什么区别?

我的直觉告诉我,Application.Current.Dispatcher永远不会改变,并且对当前应用程序中的所有线程都是全局的,而Dispatcher.CurrentDispatcher可能会创建一个新的Dispatcher实例,这取决于调用它的线程。

对吗?

如果是,Dispatcher.CurrentDispatcher的主要用途是多线程UI吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-04 21:02:10

我的直觉告诉我,Application.Current.Dispatcher永远不会改变,并且对当前应用程序中的所有线程都是全局的,而Dispatcher.CurrentDispatcher可能会创建一个新的

实例,这取决于调用它的线程。

这是正确的。

此外,从非UI线程访问Dispatcher.CurrentDispatcher没有任何意义。除非您调用Dispatcher.Run,否则它什么也不会做,而且进入无限消息循环也不是您希望在工作线程中执行的操作。

所以:

在最常见的场景中,你的应用程序只有一个UI线程,UI线程中的Application.Current.DispatcherDispatcher.CurrentDispatcher将返回相同的实例。你使用哪一个只是一个简单的preference.

  • If问题,你的应用程序有多个UI线程,那么每个DispatcherObject都将在构造时永久地与创建它的UI线程的调度程序相关联。在这种情况下,Application.Current.Dispatcher将引用您的应用程序派生线程的调度程序;您将无法使用它将消息发送到其他UI线程拥有的控件。
票数 101
EN

Stack Overflow用户

发布于 2014-04-30 20:11:30

简单来说..。

Dispatcher.CurrentDispatcher获取当前线程的调度程序。因此,如果您要从后台进程中查找UI线程的分派器,请不要使用此函数。

Application.Current.Dispatcher将始终为您提供UI线程的dispatcher,因为这是启动唯一应用程序实例的线程。

票数 22
EN

Stack Overflow用户

发布于 2012-05-04 20:50:25

我的直觉告诉我,Application.Current.Dispatcher永远不会改变,并且对当前应用程序中的所有线程都是全局的,而Dispatcher.CurrentDispatcher可能会创建一个新的

实例,这取决于调用它的线程。

也就是说,Application.Current.Dispatcher是应用程序的一个实例属性,它在构造时被指定为当前线程的dispatcher。正如Dispatcher.CurrentDispatcher的文档所指出的:

获取当前正在执行的线程的调度器,并创建一个新的调度器(如果还没有与该线程关联的话)。

如果是,Dispatcher.CurrentDispatcher的主要用途是多线程UI吗?

可能,我在获取后台线程的调度器时没有遇到任何用处,因为您通常没有属于它们的UI元素,您可能想要将操作分派到它们。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10448987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档