Как Dispatcher.BeginInvoke (...) обновляет элементы управления пользовательского интерфейса в WPF? - PullRequest
0 голосов
/ 21 сентября 2011

Я прочитал, что Dispatcher.BeginInvoke () будет запускаться в отдельном потоке от ThreadPool.

Это правильно?

Если это правильно, тогда мой вопрос: если он работает в отдельном потоке, который не является потоком пользовательского интерфейса, как он будет обновлять пользовательский интерфейс?

Ответы [ 2 ]

2 голосов
/ 21 сентября 2011

Dispatcher.BeginInvoke планирует действие, которое будет вызываться в потоке пользовательского интерфейса и вызывается из фонового потока для обновления элементов пользовательского интерфейса.

1 голос
/ 21 сентября 2011

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

Если вы хотите обновить пользовательский интерфейс из кода, запущенного в потоке ThreadPool, получите ссылку на диспетчер пользовательского интерфейса и вызовите BeginInvoke или Invoke, и он перенесет вызов в поток пользовательского интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...