Dispatcher线程如何在wpf UI控件中工作

时间:2009-09-04 09:47:35

标签: wpf dispatcher

Dispatcher线程如何在wpf UI控件中工作?

1 个答案:

答案 0 :(得分:4)

编辑。

如果您有一个长时间运行的任务,请使用BackGroundWorker将其委托给后台线程,然后您不需要使用调度程序将消息传递回UI。 This is a very good article.


这是一个非常广泛的问题。我建议你从WPF Architecture开始。

  

WPF中的大多数对象都来源于   DispatcherObject,它提供了   处理的基本结构   并发和线程。 WPF是   基于消息传递系统   由调度员实施。这个   与熟悉的Win32非常相似   消息泵;事实上,WPF   调度程序使用User32消息   执行跨线程调用。

     

真的有两个核心概念   讨论并发时要明白   在WPF中 - 调度程序和线程   亲和力。

     

在WPF的设计阶段,   目标是转移到单个线程   执行,但非线程   “亲和”模式。线程亲和力   当组件使用时发生   执行线程的标识   存储某种类型的状态。最多   这种常见的形式是使用   线程本地存储(TLS)来存储   州。线程亲和力要求   每个逻辑执行线程都是   仅由一个物理线程拥有   操作系统,可以成为   记忆密集。最后,WPF的   线程模型与...保持同步   现有的User32线程模型   带线程的单线程执行   亲和力。这个的主要原因   互操作性 - 系统就像   OLE 2.0,剪贴板和Internet   资源管理器都需要单线程   亲和力(STA)执行。

     

鉴于你有STA的对象   线程,你需要一种方法   在线程之间进行通信   验证你是否正确   线。这里有作用   调度员。调度员是基本的   消息调度系统,用   多个优先排队队列。例子   消息包括原始输入   通知(鼠标移动),框架   功能(布局)或用户命令   (执行此方法)。通过推导   从DispatcherObject,您创建一个   具有STA行为的CLR对象,和   将给出指向a的指针   调度员在创建时。