本文共 1113 字,大约阅读时间需要 3 分钟。
- Dispatcher 可为特定线程维护其按优先顺序排列的工作项队列。当在线程中创建了 Dispatcher 时,它将成为可与该线程关联的唯一 Dispatcher,即使 Dispatcher 已经关闭。
- 如果尝试获取当前线程的 CurrentDispatcher,而此时该线程没有关联的 Dispatcher,则将创建一个Dispatcher。A Dispatcher在创建时还创建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