WPF Dispatcher管理线程工作队列

本文探讨了WPF中UI线程的重要性,解释了主线程与工作者线程的区别,重点介绍了Dispatcher在并发控制中的角色,以及如何在Dispatcher上进行异步操作。通过实例和类继承结构揭示DispatcherObject在WPF架构中的核心地位。

WPF中主线程和UI线程

WPF和winform 中经常听到UI线程的概念,调试后发现创建UI控件的线程就是主线程。所以对于WPF来说UI线程就是主线程。UI线程相对应的概念是工作者线程,主线程相对的概念是子线程,线程的划分方法不同而已。由于UI线程有消息循环而工作者线程则没有,所以工作者线程也无法获取到消息,这样的话程序为了响应各种消息,所以必须用UI线程作为主线程。

ui线程和工作线程是人为划分的,当操作系统建立线程时,会假定线程不会被用户和用户交互。这样可以减少线程对系统资源的要求。但是,一旦这个线程调用一个与图形界面有关的函数,比如GetMessage或者CreateWindow,系统就会为这个线程分配很多资源,其中就包括消息队列,这个时候这个线程可以成为ui线程吧。

Dispatcher 作用

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

Dispatcher的作用是用于管理线程工作项队列,类似于Win32中的消息队列,Dispatcher的内部函数,仍然调用了传统的创建窗口类,创建窗口,建立消息泵等操作。Dispatcher本身是一个单例模式,构造函数私有,暴露了一个静态的CurrentDispatcher方法用于获得当前线程的Dispatcher。

对于线程来说,它会按照一定的优先级顺序依次执行不同的方法(委托实例)。而d

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值