Подтвердить что ты не робот

Как получить доступ к элементу управления WPF С# в потоковом безопасном режиме?

Я попытался использовать примеры из MSDN для этого, но они, похоже, применимы только к Windows Forms. Например, метод использования .InvokeRequired полагается на элемент управления Windows, однако этот метод недоступен для элементов управления WPF. Рабочий метод Backgound также создает InvalidOperationException -

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

Итак, как это можно сделать в контексте WPF?

4b9b3361

Ответ 1

Вы просто хотите использовать метод Dispatcher.Invoke (или асинхронный эквивалент Dispatcher.BeginInvoke), который будет маршировать вызов на главный WPF-интерфейс.

Класс DependencyObject содержит свойство Dispatcher, что означает, что все элементы управления и другие объекты, которые наследуются от этого класса, также предоставляют это свойство, аналогично WinForms. Кроме того, объект Application обеспечивает доступ к диспетчеру.

Пример использования может быть следующим (в кодировке Window/UserControl):

this.Dispatcher.Invoke((Action)(() =>
    {
        ...
    }));