Эквивалент SwingUtilities.invokeLater в WPF - PullRequest
2 голосов
/ 04 декабря 2011

В элементах интерфейса пользователя WPF обновления разрешены только в потоке диспетчера интерфейса.Следовательно, попытка обновить элемент пользовательского интерфейса из отдельного потока приведет к исключению.Единственный способ, который я нашел в Интернете, это обойти:

ThreadStart start = delegate(){
    Dispatcher.Invoke(DispatcherPriority.Normal, new Action...
};
new Thread(start).Start();

В Java есть метод SwingUtilities.invokeLater , который делает то же самое.

Мой вопрос: Существует ли специализированный класс утилит WPF с эквивалентом Java SWING SwingUtilities.invokeLater ?

Ответы [ 3 ]

10 голосов
/ 04 декабря 2011
Dispatcher.BeginInvoke(
   new Action(() => {
      label.Text = "Foo"
   })
);

может быть ближе к синтаксису invokeLater

1 голос
/ 04 декабря 2011

Я почти уверен, что ответ таков: нет, нет (кроме Dispatcher, который, я думаю, вам очень поможет).

Комментарий к вашему коду: нет необходимости в многопоточности,Просто используйте

Dispatcher.Invoke(...)
0 голосов
/ 13 мая 2012

** Я думаю, вы должны использовать этот метод:

Application.DoEvents()

Этот метод полезен, когда вы хотите отразить изменения потока в элементах оконной формы без простоя формы во время обработки потоков**

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