У меня есть три приложения слоя в C#. В бизнес-слое у меня есть много потоков, которые делают то же задание. Я хочу показать прогресс каждого потока на UI, но у меня нет ссылки уровня представления.
Как я могу сделать это? Каков лучший способ для этого?
Спасибо.
Наиболее подходящим ответом здесь, вероятно, является раскрытие события
где-нибудь на уровне вашего бизнеса. Код пользовательского интерфейса может подписаться на событие и обработать событие, переключившись на поток пользовательского интерфейса (при необходимости) и обновив себя.
Тогда бизнес-коду не нужно знать о пользовательском интерфейсе, и он может работать так же без какого-либо пользовательского интерфейса (но, как и со всеми делегатами / обратными вызовами, вам нужно проверить null
перед попыткой вызова делегата).
Самый простой способ заключается в том, чтобы пользовательский интерфейс передал бизнес-слою делегат для вызова (или интерфейс), чтобы он мог указать прогресс.
Это также очень легко тестировать, потому что это разделяет проблемы: в тестах бизнес-слоя вы можете передать тестовый делегат и убедиться, что он будет вызван. В тестах пользовательского интерфейса можно подделать бизнес-слой и притвориться, что есть прогресс, вызывая соответствующий делегат и проверяя, что пользовательский интерфейс обновляется соответствующим образом.