wpf(dispather调度者)

时间:2022-01-31 14:41:40

一.首先为什么要有dispather?

wpf程序是有一个主线程多个子线程组成的。主线程负责创建ui界面,数据接收,处理事件,子线程负责处理消耗资源较多耗时的操作。然而子线程不能直接访问主线程那么这个时候就需要调度者dispather。

System.Windows.Threading.DispatcherObject 类:大部分控件与其他类大多是继承 DispatcherObject 类,它提供了用于处理并发和线程的基本构造

二.wpf启动的时候会加载2个线程:一个用于呈现用户界面,另一个用于管理用户界面。而我们通常面对的时ui线程。使用一个 WPF 对象,只能在创建它的线程上使用。在其他线程上使用它会导致引发运行时异常。 UI 线程的作用是用于接收输入、处理事件、绘制屏幕以及运行应用程序代码。

同事dispatherobject提供了invoke(同步操作)和BeginInvoke(异步操作)来更新ui对象创建的信息。

在后台(*.xaml.cs)的错误访问例子:

wpf(dispather调度者)

通过下面方式修改

wpf(dispather调度者)

意思是:获取当前对象的调度,通过invoke方法来实现对其他线程ui界面内容的更改。

总结:

DispatcherObject对象只能被创建它的线程所访问,其他线程修改 DispatcherObject需要取得对应的Dispatcher,调用Invoke或者BeginInvoke来投入任务