WPF教程(四)--Dispatcher

Dispatcher在WPF中用于管理线程访问,确保UI更新的安全。当非UI线程需要更新界面时,需通过Invoke或BeginInvoke方法,在指定优先级的队列中异步或同步执行。错误的直接访问会导致异常,正确做法是利用Dispatcher进行线程间通信。

一、Dispatcher介绍
微软在WPF引入了Dispatcher,那么这个Dispatcher的主要作用是什么呢?
不管是WinForm应用程序还是WPF应用程序,实际上都是一个进程,一个进程可以包含多个线程,其中有一个是主线程,其余的是子线程。在WPF或WinForm应用程序中,主线程负责接收输入、处理事件、绘制屏幕等工作,为了使主线程及时响应,防止假死,在开发过程中对一些耗时的操作、消耗资源比较多的操作,都会去创建一个或多个子线程去完成操作,比如大数据量的循环操作、后台下载。这样一来,由于UI界面是主线程创建的,所以子线程不能直接更新由主线程维护的UI界面。

二 、走进Dispatcher
所有 WPF 应用程序启动时都会加载两个重要的线程:一个用于呈现用户界面(隐藏线程--不操作),另一个用于管理用户界面(UI线程--操作)

呈现线程是一个在后台运行的隐藏线程,

UI 线程--因此您通常面对的唯一线程 就是 UI 线程。WPF 要求将其大多数对象与 UI 线程进行关联。这称之为线程关联,意味着要使用一个 WPF 对象,只能由创建它的线程(主线程)调用。在其他线程上使用它会导致引发运行时异常。 UI 线程的作用是用于接收界面输入、处理事件、绘制屏幕以及运行应用程序代码
在 WPF 中绝大部分控件都继承自 DispatcherObject,甚至包括 Application。这些继承 DispatcherObject 的控件具有线程关联特征,也就意味着只有创建这些对象实例,且包含了 Dispatcher 的线程(通常指默认 UI 线程)才能直接对其进行更新操作。

--也就是UI线程操作WPF控件对象


Dispatche

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值