Диспетчер действительно ли WPF является решением много проблем многопоточности?

Быстрый поиск в Google принес этот результат: http://xahlee.org/java-a-day/this.html

В значительной степени ключевым словом «this» является ссылка на текущий объект (сам).

19
задан Nicolas Dorier 28 January 2009 в 19:52
поделиться

2 ответа

Основной вопрос с использованием Диспетчера (или BackgroundWorker) - то, что трудно протестировать, если Ваш ремень безопасности тестирования на самом деле не имеет поток UI.

Использование Решения 1

SynchronizationContext. Это обеспечивает ту же способность вызвать на поток UI и работы в Windows или WPF. Тестирование его также возможный .

Решение 2

Думают о диспетчере, как являющемся только что другим сервисом. Поскольку Вы используете ПРИЗМУ, Вы знакомы со службами и МОК. Вот то, как такой сервис может использоваться:

// Not a UI component
public class MyDomainService : IMyDomainService
{
   private readonly IDispatcher _dispatcher;

   public MyDomainService(IDispatcher dispatcher) 
   {
      _dispatcher = dispatcher;
   }

   private void GotResultFromBackgroundThread()
   {
       _dispatcher.Dispatch(() => DoStuffOnForegroundThread());
   }
}

Это позволяет Вам занимать место в различных реализациях свою платформу/тестирование.

Вот пример IDispatcher, реализация WPF и тестовая реализация . Вы зарегистрировали бы их в своем контейнере МОК точно так же, как любой другой сервис, и они доступны и UI и другим сервисам.

16
ответ дан 30 November 2019 в 04:59
поделиться

да и нет.. это - вещь рендеринга.. не вещь поточной обработки по сути..

Диспетчер выбирает объекты работы на приоритетной основе и выполняет каждого к завершению. Каждый поток UI должен иметь по крайней мере одного Диспетчера, и каждый Диспетчер может выполнить объекты работы точно в одном потоке. согласно этому эта ссылка от Microsoft.

все еще необходимо обработать самостоятельно любые потоки, которые Вы запускаете сами.

Проверка этот для получения информации о: Многопоточное Программирование с Основанным на событии Асинхронным Шаблоном

Лично я использую Второстепенный Рабочий для моих потребностей поточной обработки.

Лучшие практики здесь .

2
ответ дан 30 November 2019 в 04:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: