对于WPF程序,大家绕不开的一个概念叫做Dispatcher
- 什么是
Dispathcer
WPF程序启动后会有两个线程:UI线程和渲染线程。UI线程会将所有的任务切成小份,放入一个队列进行依次执行,而执行这些工作的object
就是Dispatcher
。对于WPF来说,常见的Dispatcher
概念有三个Application.Current.Dispatcher
,Dispather.CurrentDispatcher
,DispatcherObject.Dispatcher
- 三者的区别
对于大部分的WPF类来说,它们都继承于DispatcherObject
。而每个DispatcherObject
都只能被创建它的DispatcherObject
所操作。这种行为的实现方式就是,在每个DispatcherObject
的操作之前,会调用VerifyAccess
方法,检测当前线程的Dispatcher
(即Dispather.CurrentDispatcher
)和自身的Dispatcher
(即DispatcherObject.Dispatcher
)是否相同。若不相同则会抛出相应的异常。
所以可以从此了解到,Dispather.CurrentDispatcher
是和当前线程相关的Dispathcer
,而Dispatcher