此页面有用吗?
您对此内容的反馈非常重要。 请告诉我们您的想法。
更多反馈?
1500 个剩余字符
导出 (0) 打印
全部展开
此文章由机器翻译。 将光标移到文章的句子上,以查看原文。 更多信息。
译文
原文

Dispatcher 类

提供用于管理线程工作项队列的服务。

System.Object
  System.Windows.Threading.Dispatcher

命名空间:  System.Windows.Threading
程序集:  WindowsBase(在 WindowsBase.dll 中)

public sealed class Dispatcher

Dispatcher 类型公开以下成员。

  名称说明
公共属性静态成员CurrentDispatcher获取当前正在执行的线程的 Dispatcher,并在该线程没有关联的调度程序时创建一个新的 Dispatcher
公共属性HasShutdownFinished确定 Dispatcher 是否已经完成关闭。
公共属性HasShutdownStarted确定 Dispatcher 是否正在关闭。
公共属性Hooks获取提供有关 Dispatcher 的其他事件信息的挂钩集合。
公共属性Thread获取与此 Dispatcher 关联的线程。
页首

  名称说明
公共方法BeginInvoke(Delegate, Object[])用在其上创建了 Dispatcher 的线程的指定参数异步执行指定委托。
公共方法BeginInvoke(DispatcherPriority, Delegate)按指定的优先级在与 Dispatcher 关联的线程上异步执行指定的委托。
公共方法BeginInvoke(Delegate, DispatcherPriority, Object[])用在其上创建了 Dispatcher 的线程上的指定参数,按指定优先级异步执行指定委托。
公共方法BeginInvoke(DispatcherPriority, Delegate, Object)按指定的优先级并使用指定的参数在与 Dispatcher 关联的线程上异步执行指定的委托。
公共方法BeginInvoke(DispatcherPriority, Delegate, Object, Object[])按指定的优先级并使用指定的参数数组在与 Dispatcher 关联的线程上异步执行指定的委托。
公共方法BeginInvokeShutdown异步启动 Dispatcher 的关闭。
公共方法CheckAccess确定调用线程是否为与此 Dispatcher 关联的线程。
公共方法DisableProcessing禁用对 Dispatcher 队列的处理。
公共方法Equals(Object)确定指定的对象是否等于当前对象。 (继承自 Object。)
公共方法静态成员ExitAllFrames请求退出所有帧,包括嵌套的帧。
公共方法静态成员FromThread获取指定线程的 Dispatcher
公共方法GetHashCode作为默认哈希函数。 (继承自 Object。)
公共方法GetType获取当前实例的 Type (继承自 Object。)
公共方法Invoke(Action)执行指定的Action在线程同步Dispatcher与之关联。
公共方法Invoke(Action, DispatcherPriority)执行指定的Action在指定的优先级的线程同步Dispatcher与之关联。
公共方法Invoke(Delegate, Object[])用与 Dispatcher 关联的线程上的指定参数同步执行指定委托。
公共方法Invoke(DispatcherPriority, Delegate)按指定的优先级在与 Dispatcher 关联的线程上同步执行指定的委托。
公共方法Invoke(Action, DispatcherPriority, CancellationToken)执行指定的Action在指定的优先级的线程同步Dispatcher与之关联。
公共方法Invoke(Delegate, TimeSpan, Object[])用与 Dispatcher 关联的线程上的指定参数,按指定优先级同步执行指定时间范围内的指定委托。
公共方法Invoke(Delegate, DispatcherPriority, Object[])按指定的优先级并使用指定的参数在与 Dispatcher 关联的线程上同步执行指定的委托。
公共方法Invoke(DispatcherPriority, Delegate, Object)按指定的优先级并使用指定的参数在与 Dispatcher 关联的线程上同步执行指定的委托。
公共方法Invoke(DispatcherPriority, TimeSpan, Delegate)按指定的优先级并使用指定的超时值在创建 Dispatcher 的线程上同步执行指定的委托。
公共方法Invoke(Action, DispatcherPriority, CancellationToken, TimeSpan)执行指定的Action在指定的优先级的线程同步Dispatcher与之关联。
公共方法Invoke(Delegate, TimeSpan, DispatcherPriority, Object[])用与 Dispatcher 关联的线程上的指定参数,按指定优先级同步执行指定时间范围内的指定委托。
公共方法Invoke(DispatcherPriority, Delegate, Object, Object[])按指定的优先级并使用指定的参数在与 Dispatcher 关联的线程上同步执行指定的委托。
公共方法Invoke(DispatcherPriority, TimeSpan, Delegate, Object)按指定的优先级并使用指定的参数在与 Dispatcher 关联的线程上同步执行指定的委托。
公共方法Invoke(DispatcherPriority, TimeSpan, Delegate, Object, Object[])按指定的优先级并使用指定的参数在与 Dispatcher 关联的线程上同步执行指定的委托。
公共方法Invoke<TResult>(Func<TResult>)执行指定的Func<TResult>在线程同步Dispatcher与之关联。
公共方法Invoke<TResult>(Func<TResult>, DispatcherPriority)执行指定的Func<TResult>在指定的优先级的线程同步Dispatcher与之关联。
公共方法Invoke<TResult>(Func<TResult>, DispatcherPriority, CancellationToken)执行指定的Func<TResult>在指定的优先级的线程同步Dispatcher与之关联。
公共方法Invoke<TResult>(Func<TResult>, DispatcherPriority, CancellationToken, TimeSpan)执行指定的Func<TResult>在指定的优先级的线程同步Dispatcher与之关联。
公共方法InvokeAsync(Action)执行指定的Action的线程上异步Dispatcher与之关联。
公共方法InvokeAsync(Action, DispatcherPriority)执行指定的Action在指定的优先级的线程上异步Dispatcher与之关联。
公共方法InvokeAsync(Action, DispatcherPriority, CancellationToken)执行指定的Action在指定的优先级的线程上异步Dispatcher与之关联。
公共方法InvokeAsync<TResult>(Func<TResult>)执行指定的Func<TResult>的线程上异步Dispatcher与之关联。
公共方法InvokeAsync<TResult>(Func<TResult>, DispatcherPriority)执行指定的Func<TResult>在指定的优先级的线程上异步Dispatcher与之关联。
公共方法InvokeAsync<TResult>(Func<TResult>, DispatcherPriority, CancellationToken)执行指定的Func<TResult>在指定的优先级的线程同步Dispatcher与之关联。
公共方法InvokeShutdown同步启动 Dispatcher 的关闭过程。
公共方法静态成员PushFrame进入执行循环。
公共方法静态成员Run将主执行帧推送到 Dispatcher 的事件队列中。
公共方法ToString返回表示当前对象的字符串。 (继承自 Object。)
公共方法静态成员ValidatePriority确定指定的 DispatcherPriority 是否为有效的优先级。
公共方法VerifyAccess确定调用线程是否可以访问此 Dispatcher
公共方法静态成员Yield()创建异步可以回到当前调度程序的控件,并提供了一个机会来处理其他事件调度程序的 awaitable 对象。
公共方法静态成员Yield(DispatcherPriority)创建异步可以回到当前调度程序的控件,并提供了一个机会来处理其他事件调度程序的 awaitable 对象。 控制将返回到等待此方法的结果的代码时,会发生的工作则计划在具有指定的优先级。
页首

  名称说明
公共事件ShutdownFinishedDispatcher 完成关闭时发生。
公共事件ShutdownStartedDispatcher 开始关闭时发生。
公共事件UnhandledException在通过 InvokeBeginInvoke 执行委托的过程中,如果引发线程异常且未能捕获该异常,则发生此事件。
公共事件UnhandledExceptionFilter当在筛选阶段通过 InvokeBeginInvoke 执行委托的过程中,如果引发线程异常且未能捕获该异常,则发生此事件。
页首

  名称说明
公共扩展方法BeginInvoke(Action)已重载。 用正常优先级在依据其创建指定 Dispatcher 的线程上异步执行指定的委托。 (由 DispatcherExtensions 定义。)
公共扩展方法BeginInvoke(Action, DispatcherPriority)已重载。 用指定的优先级在依据其创建指定 Dispatcher 的线程上异步执行指定的委托。 (由 DispatcherExtensions 定义。)
公共扩展方法Invoke(Action)已重载。 用正常优先级在依据其创建指定 Dispatcher 的线程上同步执行指定的委托。 (由 DispatcherExtensions 定义。)
公共扩展方法Invoke(Action, TimeSpan)已重载。 在依据其创建指定 Dispatcher 的线程上同步执行指定的委托,并在指定的超时期限后停止执行。 (由 DispatcherExtensions 定义。)
公共扩展方法Invoke(Action, DispatcherPriority)已重载。 用指定的优先级在依据其创建指定 Dispatcher 的线程上同步执行指定的委托。 (由 DispatcherExtensions 定义。)
公共扩展方法Invoke(Action, TimeSpan, DispatcherPriority)已重载。 用指定的优先级在依据其创建指定 Dispatcher 的线程上同步执行指定的委托,并在指定的超时期限后停止执行。 (由 DispatcherExtensions 定义。)
页首

Dispatcher 可为特定线程维护其按优先顺序排列的工作项队列。

当在线程中创建了 Dispatcher 时,它将成为可与该线程关联的唯一 Dispatcher,即使 Dispatcher 已经关闭。

如果尝试获取当前线程的 CurrentDispatcher,而此时该线程没有关联的 Dispatcher,则将创建一个 Dispatcher A Dispatcher在创建时还创建DispatcherObject 如果您创建Dispatcher在后台线程,务必关闭之前退出该线程的调度程序。

如果 Dispatcher 已经关闭,它将无法重新启动。

在 WPF 中,DispatcherObject 只能通过与它关联的 Dispatcher 进行访问。 例如,后台线程不能更新与 UI 线程中的 Dispatcher 关联的 Button 内容。 为了使该后台线程能够访问 ButtonContent 属性,该后台线程必须将此工作委托给与该 UI 线程关联的 Dispatcher 这可以通过使用 InvokeBeginInvoke 来完成。Invoke 是同步操作,而 BeginInvoke 是异步操作。 该操作将按指定的 DispatcherPriority 添加到 Dispatcher 的队列中。

如果对某个已关闭的 Dispatcher 调用 BeginInvoke,则返回的 DispatcherOperation 的状态属性将设置为 Aborted

DisableProcessing 以外,Dispatcher 上的所有方法均是自由线程的。

派生自 DispatcherObject 的对象具有线程关联。

派生自 Freezable 的对象在冻结时是自由线程的。 有关更多信息,请参见 Freezable 对象概述

下面的示例演示如何在 Dispatcher 中放置操作。 有关此示例的完整源代码,请参见 Single-Threaded Application with Long-Running Calculation Sample(长时间运行计算的单线程应用程序示例)

首先,将创建一个不接受任何参数的委托。


public delegate void NextPrimeDelegate();


接下来,调用 BeginInvoke(DispatcherPriority, Delegate) BeginInvoke(DispatcherPriority, Delegate) 的这一调用采用了两个参数:一个是优先级,设置为 DispatcherPriority.Normal;另一个是回调,它通过委托 NextPrimeDelegate 的实例传入。


startStopButton.Dispatcher.BeginInvoke(
    DispatcherPriority.Normal,
    new NextPrimeDelegate(CheckNextNumber));


.NET Framework

受以下版本支持:4.5、4、3.5、3.0

.NET Framework Client Profile

受以下版本支持:4、3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(不支持服务器核心角色), Windows Server 2008 R2(支持带 SP1 或更高版本的服务器核心角色;不支持 Itanium)

并不是.NET Framework 对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求.

此类型的任何公共static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

社区附加资源

添加
显示:
© 2015 Microsoft