DependencyObject.Dispatcher Свойство

Определение

Возвращает CoreDispatcher , с которым связан этот объект. CoreDispatcher представляет средство, которое может получить доступ к DependencyObject в потоке пользовательского интерфейса, даже если код инициируется потоком, не относящегося к пользовательскому интерфейсу.

public:
 property CoreDispatcher ^ Dispatcher { CoreDispatcher ^ get(); };
CoreDispatcher Dispatcher();
public CoreDispatcher Dispatcher { get; }
var coreDispatcher = dependencyObject.dispatcher;
Public ReadOnly Property Dispatcher As CoreDispatcher

Значение свойства

CoreDispatcher, с которым связан объект DependencyObject, который представляет поток пользовательского интерфейса.

Примеры

В этом примере показано использование Dispatcher для неявного файла кода программной части для страницы. В этом примере для добавления реализации DispatchedHandler используется лямбда-выражение. Сам обработчик обрабатывает событие Accelerometer.ReadingChanged , которое не будет выполняться в потоке пользовательского интерфейса.

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 , которую можно использовать для маршалинга вызовов, поступающих из потоков, не относящихся к пользовательскому интерфейсу, с помощью RunAsync и функции ожидания. Дополнительные сведения о ожидаемых функциях см. в статье Вызов асинхронных API в C# или Visual Basic. См. также раздел "DependencyObject и потоки" справочного раздела DependencyObject .

DependencyObject должен быть создан в потоке пользовательского интерфейса и иметь сходство с потоком пользовательского интерфейса. Так как это точка входа, которая позволяет получать данные между потоками, DependencyObject.Dispatcher является единственным API экземпляра DependencyObject или любого из его подклассов, к которым можно получить доступ из потока, не относящегося к пользовательскому интерфейсу, не вызывая исключения между потоками. Все остальные API DependencyObject создают исключение при попытке вызвать их из рабочего потока или другого потока, не относящегося к пользовательскому интерфейсу.

В частности, свойство Dispatcher получает CoreDispatcher , связанный с потоком пользовательского интерфейса приложения. Выполнение кода с помощью метода RunAsyncCoreDispatcher необходимо, если вы планируете запрашивать или изменять значение любого свойства зависимостей, даже если этот объект еще не связан с визуальным деревом XAML или видимым пользовательским интерфейсом (визуальным корнем окна приложения).

Window.Dispatcher также ссылается на CoreDispatcher , связанный с потоком пользовательского интерфейса. Window.Dispatcher — это всего лишь оболочка для CoreWindow.Dispatcher , поэтому класс Window имеет к нему простой доступ.

Примечание

Подключение для значения диспетчера недоступно во время разработки. Это может вызвать проблемы, если вы создали пользовательский элемент управления, использующий значения Диспетчера, и к этому коду обращается среда времени разработки через пути кода, которые используются в представлении конструктора, например конструкторы и загруженные обработчики. Если вы пишете пользовательский элемент управления и столкнулись с этой проблемой, попробуйте ввести условный аргумент guard в коде, например не вызывать этот код, если DesignModeEnabled имеет значение true.

Применяется к