Dispatcher

  • Dispatcher 可为特定线程维护其按优先顺序排列的工作项队列。当在线程中创建了 Dispatcher 时,它将成为可与该线程关联的唯一 Dispatcher,即使 Dispatcher 已经关闭。
  • 如果尝试获取当前线程的 CurrentDispatcher,而此时该线程没有关联的 Dispatcher,则将创建一个DispatcherDispatcher在创建时还创建DispatcherObject
  • 通常很多UI对象比如,Window, Button等都是从DispatcherObject派生。
  • 派生自 DispatcherObject 的对象具有线程关联。只有在其上创建 Dispatcher 的线程才可以直接访问 DispatcherObject若要从不同于在其上创建DispatcherObject 的线程的某个线程访问 DispatcherObject,需要通过与 DispatcherObject 关联的Dispatcher 调用 Invoke 或 BeginInvoke。因此在WPF中,DispatcherObject 只能通过与它关联的 Dispatcher 进行访问。例如,后台线程不能更新与 UI 线程中的 Dispatcher 关联的 Button 内容。为了使该后台线程能够访问 Button 的 Content 属性,该后台线程必须将此工作委托给与该 UI 线程关联的 Dispatcher这可以通过使用 Invoke 或 BeginInvoke 来完成。Invoke 是同步操作,而 BeginInvoke 是异步操作。该操作将按指定的 DispatcherPriority 添加到Dispatcher 的队列中。
  • Dispatcher 类当前只提供从非用户界面 (UI) 线程在 UI 上运行代码的支持。通过使用 Invoke 或 BeginInvoke 来访问 UI 线程的 Dispatcher 对象。
  • Dispatcher通常的用法是:在非UI线程函数中调用UI的Dispatcher来更新UI.
  • 如果需要更新用来data binding的data,此操作需要在UI thread中进行,通常的做法是UIThread.Dispatcher.Invoke(new System.Action(delegate
                {
                   // update data which is used for data binding.
                }), null);

转载于:https://www.cnblogs.com/chuwachen/archive/2013/02/16/3911042.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值