Dispatcher 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
提供用于管理线程工作项队列的服务。
public ref class Dispatcher sealed
public sealed class Dispatcher
type Dispatcher = class
Public NotInheritable Class Dispatcher
- 继承
-
Dispatcher
示例
以下示例演示如何将操作置于 .Dispatcher 有关此示例的完整源代码,请参阅 包含Long-Running计算示例的单线程应用程序。
首先,创建一个不接受任何参数的委托。
public delegate void NextPrimeDelegate();
Public Delegate Sub NextPrimeDelegate()
接下来, BeginInvoke(DispatcherPriority, Delegate) 调用它。 此调用采用 BeginInvoke(DispatcherPriority, Delegate) 两个参数:优先级(设置为 DispatcherPriority.Normal)和回调(通过委托 NextPrimeDelegate
实例传入)。
startStopButton.Dispatcher.BeginInvoke(
DispatcherPriority.Normal,
new NextPrimeDelegate(CheckNextNumber));
startStopButton.Dispatcher.BeginInvoke(DispatcherPriority.Normal, New NextPrimeDelegate(AddressOf CheckNextNumber))
注解
维护 Dispatcher 特定线程的工作项的优先级队列。
在线程上创建 a Dispatcher 时,它将成为唯 Dispatcher 一可与该线程关联的线程,即使 Dispatcher 关闭该线程也是如此。
如果尝试获取 CurrentDispatcher 当前线程且 Dispatcher 未与该线程关联,将创建一个 Dispatcher 。 Dispatcher创建 A DispatcherObject时也会创建 。 如果在后台线程上创建一个 Dispatcher ,请确保在退出线程之前关闭调度程序。
如果已关闭, Dispatcher 则无法重新启动。
在 WPF 中, DispatcherObject 只能由 Dispatcher 它与之关联的访问。 例如,后台线程无法更新与 Dispatcher UI 线程上关联的内容Button。 为了使后台线程访问该 Content 属性 Button,后台线程必须将工作委托给 Dispatcher 与 UI 线程关联的工作。 这是通过使用或 Invoke BeginInvoke。 Invoke 是同步的, BeginInvoke 是异步的。 操作将添加到指定DispatcherPriority位置的队列Dispatcher中。
如果在 BeginInvoke 关闭的某个 Dispatcher 节点上调用,则返回 DispatcherOperation 的状态属性设置为 Aborted。
除此以外DisableProcessing,所有方法Dispatcher都是自由线程的。
派生自 DispatcherObject 具有线程相关性的对象。
从 Freezable 派生的对象在冻结时是自由线程的。 有关详细信息,请参阅 Freezable 对象概述。
属性
CurrentDispatcher |
获取当前正在执行的线程的 Dispatcher,并在该线程没有关联的调度程序时创建一个新的 Dispatcher。 |
HasShutdownFinished |
确定 Dispatcher 是否已经完成关闭。 |
HasShutdownStarted |
确定 Dispatcher 是否正在关闭。 |
Hooks |
获取提供有关 Dispatcher 的其他事件信息的挂钩集合。 |
Thread |
获取与此 Dispatcher 关联的线程。 |
方法
事件
ShutdownFinished |
当 Dispatcher 完成关闭时发生。 |
ShutdownStarted |
当 Dispatcher 开始关闭时发生。 |
UnhandledException |
在通过 Invoke 或 BeginInvoke 执行委托的过程中,如果引发线程异常且未能捕获该异常,则发生此事件。 |
UnhandledExceptionFilter |
当在筛选阶段通过 Invoke 或 BeginInvoke 执行委托的过程中,如果引发线程异常且未能捕获该异常,则发生此事件。 |
扩展方法
BeginInvoke(Dispatcher, Action) |
用正常优先级在依据其创建指定 Dispatcher 的线程上异步执行指定的委托。 |
BeginInvoke(Dispatcher, Action, DispatcherPriority) |
用指定的优先级在依据其创建指定 Dispatcher 的线程上异步执行指定的委托。 |
Invoke(Dispatcher, Action) |
用正常优先级在依据其创建指定 Dispatcher 的线程上同步执行指定的委托。 |
Invoke(Dispatcher, Action, TimeSpan) |
在依据其创建指定 Dispatcher 的线程上同步执行指定的委托,并在指定的超时期限后停止执行。 |
Invoke(Dispatcher, Action, TimeSpan, DispatcherPriority) |
用指定的优先级在依据其创建指定 Dispatcher 的线程上同步执行指定的委托,并在指定的超时期限后停止执行。 |
Invoke(Dispatcher, Action, DispatcherPriority) |
用指定的优先级在依据其创建指定 Dispatcher 的线程上同步执行指定的委托。 |