博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dispatcher
阅读量:5129 次
发布时间:2019-06-13

本文共 1113 字,大约阅读时间需要 3 分钟。

  • 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

你可能感兴趣的文章
集算器协助java处理结构化文本之对齐连接
查看>>
django环境部署-nginx环境
查看>>
android 網易云閱讀 書架的實現
查看>>
PHP Markdown 解析器Parsedown
查看>>
webpack升级4记录
查看>>
【计算机视觉】图像处理与计算机视觉基础,经典以及最近发展
查看>>
【QT开发】QT在windows下的exe应用程序如何在别人的电脑上直接运行
查看>>
加快sqlite的读写
查看>>
listen的参数backlog的意义
查看>>
xcode6 下 ios simulator 有 Home 键么?
查看>>
https
查看>>
华南理工大学“三七互娱杯”程序设计竞赛 G: HRY and tree
查看>>
OpenLayers 添加RegularPolygon
查看>>
Android实现左右滑动效果
查看>>
HDU 5071 Chat
查看>>
[CODEVS 1380]没有上司的舞会
查看>>
Pizza Delivery
查看>>
hsdfz -- 6.17 -- day2
查看>>
纯CSS实现多选组件
查看>>
linux安装project lemon测评机
查看>>