DispatcherHelper
нужен только тогда, когда вы хотите внести изменения в компоненты вашего потока пользовательского интерфейса из кода, который выполняется в другом потоке. Например. в приложении Silverlight вы вызываете веб-сервис для асинхронного получения некоторых данных и теперь хотите сообщить Ui, что данные присутствуют через событие OnNotifyPropertyChanged
.
Сначала вы должны инициализировать DispatcherHelper
. В Silverlight вы делаете это в Application_Startup
:
//initialize Dispatch helper
private void Application_Startup( object sender, StartupEventArgs e) {
RootVisual = new MainPage();
DispatcherHelper.Initialize();
}
В WPF инициализация выполняется в статическом конструкторе вашего класса приложения:
static App() {
DispatcherHelper.Initialize();
}
Затем, в вашем случае, обрабатывая завершение вашего вызова asnc, используйте следующий код для вызова RaisePropertyChanged
в потоке пользовательского интерфейса:
DispatcherHelper.CheckBeginInvokeOnUI(
() => RaisePropertyChanged(PowerStatePropertyName)
);
DispatcherHelper.BeginInvokeOnUl
ожидает Action
, так что вы можете использовать любой код здесь просто используйте
DispatcherHelper.CheckBeginInvokeOnUI(
() => { /* complex code goes in here */ }
);
для выполнения более сложных задач.