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

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

被折叠的 条评论
为什么被折叠?



