control.BeginInvoke () Vs Dispatcher Vs SynchronizationContext Vs .. - НАДЕЖНОСТЬ

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

  1. Control.BeginInvoke ()
  2. Использование SynchronizatoinContext Класс
  3. Использование Dispatcher.BeginInvoke (priority ..)

Кто-нибудь может сказать мне, какой НАДЕЖНЫЙ способ асинхронно вызвать метод, который будет выполняться на Поток пользовательского интерфейса. Есть опыт? Я вижу, что Dispatcher.BeginInvoke имеет приоритетный компонент, делает ли он его более надежным?

Контекст :
мы используем someControl.BeginInvoke () , но заметили, что иногда (к сожалению, только в производственной среде конечного пользователя) делегат, переданный в BeginInvoke, никогда не выполняется, что заставляет меня полагать, что сообщение post который он создает, теряется. Нам нужен надежный способ обратной связи с потоком пользовательского интерфейса. control.Invoke () иногда зависает пользовательский интерфейс, поэтому мы тоже не хотим туда идти.

6
задан Community 23 May 2017 в 12:22
поделиться