Шаблон проектирования для асинхронных вызовов в C #

Я разрабатываю настольное приложение с несколькими уровнями: уровень GUI (WinForms MVP) содержит ссылки на интерфейсы классов адаптеров, и эти адаптеры вызывают классы BL, которые выполняют фактическую работу.

Помимо выполнения запросов от GUI, BL также запускает некоторые события, на которые GUI может подписаться через интерфейсы. Например, в BL есть объект CurrentTime , который периодически изменяется, и GUI должен отражать эти изменения.

Есть две проблемы, связанные с многопоточностью:

  1. Мне нужно кое-что сделать из логики вызывает асинхронный, чтобы они не блокировали графический интерфейс.
  2. Некоторые события, которые получает графический интерфейс, запускаются из потоков, не связанных с графическим интерфейсом.

На каком уровне лучше всего обрабатывать многопоточность? Моя интуиция подсказывает, что Presenter лучше всего подходит для этого, я прав? Можете ли вы дать мне пример приложения, которое делает то, что мне нужно? И имеет ли смысл для докладчика хранить ссылку на форму, чтобы он мог вызывать в ней делегатов?

РЕДАКТИРОВАТЬ: Награда, вероятно, достанется Хенрику, если кто-то не даст еще лучшего ответа.

5
задан Ilya Kogan 18 March 2011 в 23:55
поделиться