关于WPF Dispatcher

本文详细介绍了WPF中Dispatcher的概念及工作原理。Dispatcher为线程提供了任务管理服务,通过维护带有优先级的任务队列,实现了不同线程间的交互。文章还讲解了如何使用Invoke和BeginInvoke方法将任务委派给特定的线程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做WPF的童鞋经常看到Dispatcher,而Dispatcher到底是什么喃?

MSDN解释是“为一个线程提供管理任务队列的一个服务”。一个Dispatcher在一个指定线程中,维护了一个拥有优先级队列任务的队列。当一个Dispatcher在一个线程中被构造,那就成了唯一可以和线程交互的对象,即使该服务被关闭以后也是如此。

如果想在当前的线程中得到与之交互的CurrentDispatcher,而Dispatcher又不在这个线程中,将一个Dispatcher将被创建。但如果Dispatcher被关闭了,它将不能被重启。

在WPF里,一个DispatcherObject只能被和它相关的Dispatcher里进行交互。举个例子,一个后台线程不能改变一个按钮的Content属性,因为这个按钮是和UI线程相关联,如果想在后台线程访问这个按钮的Content属性,后台线程需要将这个任务委托给UI线程相关的Dispatcher。可以使用Invoke(同步)或者BeginInvoke(异步)来实现。这个操作将以一个指定的优先级被加入到Dispatcher队列里。

如果一个Dispatcher被关闭后调用BeginInvoke,被返回的状态属性DispatcherOperation将被设为Aborted.

Dispatcher所有的方法都和Thread无关,可以跨线程使用。
继承于DispatcherObject的对象都和线程有关,不能跨线程使用。
继承于Freezable在被冻结的时候可以跨线程使用。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值