Как обновить UI от бизнес-слоя?

У меня есть три приложения слоя в C#. В бизнес-слое у меня есть много потоков, которые делают то же задание. Я хочу показать прогресс каждого потока на UI, но у меня нет ссылки уровня представления.

Как я могу сделать это? Каков лучший способ для этого?

Спасибо.

6
задан Mehdi Amrollahi 20 June 2010 в 07:26
поделиться

2 ответа

Наиболее подходящим ответом здесь, вероятно, является раскрытие события где-нибудь на уровне вашего бизнеса. Код пользовательского интерфейса может подписаться на событие и обработать событие, переключившись на поток пользовательского интерфейса (при необходимости) и обновив себя.

Тогда бизнес-коду не нужно знать о пользовательском интерфейсе, и он может работать так же без какого-либо пользовательского интерфейса (но, как и со всеми делегатами / обратными вызовами, вам нужно проверить null перед попыткой вызова делегата).

6
ответ дан 10 December 2019 в 00:33
поделиться

Самый простой способ заключается в том, чтобы пользовательский интерфейс передал бизнес-слою делегат для вызова (или интерфейс), чтобы он мог указать прогресс.

Это также очень легко тестировать, потому что это разделяет проблемы: в тестах бизнес-слоя вы можете передать тестовый делегат и убедиться, что он будет вызван. В тестах пользовательского интерфейса можно подделать бизнес-слой и притвориться, что есть прогресс, вызывая соответствующий делегат и проверяя, что пользовательский интерфейс обновляется соответствующим образом.

4
ответ дан 10 December 2019 в 00:33
поделиться
Другие вопросы по тегам:

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