Многопоточность в WPF

Элементы WPF, отображаемые в одном окне, обладают потоковым родством (thread affinity). Это означает, что поток, который их создал, владеет ими, а другие потоки не могут взаимодействовать с этими элементами напрямую. С набором элементов, обладающих потоковым родством, связан диспетчер, который принимает методы и ставит их на выполнение в очередь потока элементов. Чтобы элемент мог обладать потоковым родством и иметь доступ к диспетчеру, он должен наследоваться от класса DispatcherObject. Этот класс имеет всего три члена:

Dispatcher – свойство, возвращающее диспетчер потока;

CheckAccess() – метод возвращает true, если код выполняется в потоке элемента;

VerifyAccess() – если вызывающий код находится не в потоке элемента, данный метод генерирует исключение InvalidOperationException.

Диспетчер – это экземпляр класса System.Windows.Threading.Dispatcher. Метод диспетчера BeginInvoke() используется для того, чтобы спланировать код в качестве задачи для диспетчера:

// предположим, что это обработчик нажатия некоторой кнопки

private void btn_Click(object sender, RoutedEventArgs e)

{

// запускаем новый метод в отдельном потоке

new Thread(UpdateTextRight).Start();

}

private void UpdateTextRight()

{

// обновим интерфейс - у диспетчера окна вызываем BeginInvoke()

Dispatcher.BeginInvoke((Action)(() => txt.Text = "New text"));

}

Для организации в приложении WPF асинхронного выполнения можно использовать объект класса System.ComponentModel.BackgroundWorker. Основные элементы этого класса:

RunWorkerAsync() – метод стартует асинхронную операцию. Имеется перегруженная версия, принимающая аргумент асинхронной операции.

CancelAsync() – запрос на отмену асинхронной операции.

DoWork – обработчик этого события будет асинхронной операцией.

RunWorkerCompleted – это событие генерируется, если асинхронная операция завершилась, была отменена или прекращена из-за исключения.

IsBusy – булево свойство; позволяет узнать, выполняется ли операция.

Варианты организации приложений WPF

Приложения WPF допускают несколько способов организации. Самый распространённый вариант – приложение в виде набора окон. Альтернативой являются приложения на основе страниц.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: