DependencyObject.Dispatcher 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取与此 对象关联的 CoreDispatcher 。 CoreDispatcher 表示可以访问 UI 线程上的 DependencyObject 的工具,即使代码是由非 UI 线程启动的。
public:
property CoreDispatcher ^ Dispatcher { CoreDispatcher ^ get(); };
CoreDispatcher Dispatcher();
public CoreDispatcher Dispatcher { get; }
var coreDispatcher = dependencyObject.dispatcher;
Public ReadOnly Property Dispatcher As CoreDispatcher
属性值
与 DependencyObject 对象关联的 CoreDispatcher,表示 UI 线程。
示例
此示例演示 Dispatcher 用于 Page 的代码隐藏文件的隐式此 。 此示例使用 lambda 表达式添加 DispatchedHandler 实现。 处理程序本身正在处理 Accelerometer.ReadingChanged 事件,该事件不会在 UI 线程上执行。
private async void ReadingChanged(object sender, AccelerometerReadingChangedEventArgs e)
{
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
AccelerometerReading reading = e.Reading;
ScenarioOutput_X.Text = String.Format("{0,5:0.00}", reading.AccelerationX);
ScenarioOutput_Y.Text = String.Format("{0,5:0.00}", reading.AccelerationY);
ScenarioOutput_Z.Text = String.Format("{0,5:0.00}", reading.AccelerationZ);
});
}
注解
Dispatcher 属性提供 CoreDispatcher 引用,该引用可用于封送来自非 UI 线程的调用,使用 RunAsync 和可等待函数。 有关可等待函数的详细信息,请参阅 使用 C# 或 Visual Basic 调用异步 API。 另请参阅 DependencyObject 参考主题的“ DependencyObject 和线程处理”部分。
DependencyObject 必须在 UI 线程上创建,并且与 UI 线程具有关联。 因为它是一个允许跨线程的入口点,DependencyObject.Dispatcher 是 DependencyObject 或其任何子类的唯一实例 API,可以从非 UI 线程访问,而不会引发跨线程异常。 如果尝试从工作线程或其他非 UI 线程调用所有其他 DependencyObject API,则会引发异常。
具体而言,Dispatcher 属性获取与应用 UI 线程关联的 CoreDispatcher 。 如果要查询或更改任何依赖属性的值,则必须通过 CoreDispatcher 的 RunAsync 方法运行代码,即使该对象尚未与 XAML 可视化树或可见 UI (应用窗口的可视根) 相关联。
Window.Dispatcher 还引用与 UI 线程关联的 CoreDispatcher 。 Window.Dispatcher 基本上只是 CoreWindow.Dispatcher 的包装器,因此 Window 类可以轻松访问它。
注意
Dispatcher 值的连接在设计时视图中不可用。 如果已创建使用 Dispatcher 值的自定义控件,并且设计时环境通过设计视图使用的代码路径(例如构造函数和 加载 处理程序)访问该代码,则这可能会导致问题。 如果在编写自定义控件时遇到此问题,请考虑在代码中引入一个防护条件,例如在 DesignModeEnabled为 true 时不调用该代码。