Простой пример DispatcherHelper - PullRequest
       20

Простой пример DispatcherHelper

6 голосов
/ 13 сентября 2011

Я пытаюсь выяснить, как я могу использовать легкий инструментарий DispatcherHelperftom MVVM в SL, но я не могу найти ни одного примера.

С домашней страницы этого фреймворка я знаю, что

Класс DispatcherHelper, легкий класс, помогающий вам создавать многопоточные приложения.

Но я не знаю, как его использовать.

Как и для чего я могу это использовать?

1 Ответ

18 голосов
/ 14 сентября 2011

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 */ }
);

для выполнения более сложных задач.

...