Передача обработчиков событий в конструктор - C#
Формулировка задачи:
Можно ли передавать обработчики событий в конструктор как параметры, если да, то как?
Более общая задача.
Есть операция, которая длится большой промежуток времени, но её можно разбить на мелкие стадии. Пользователю надо сообщать о прогрессе.
Идея такая: на стороне бизнес-логики в класс добавил функционал, чтобы метод (хотя более уместен термин "некая операция"), мог сообщать клиенту о своём прогрессе.
Реализовал так.
Бизнес-логика.
Клиент.
Подписываться каждый раз на нужные события не очень красиво, подумал, что может можно как-то через параметры передать обработчики.
P.S. Если кто-то предложит более простую идею/реализацию буду благодарен
Листинг программы
- public class WasInfoBuilder
- {
- public BackgroundWorker BuildApplicationAllInfoBackgroundWorker { get; set; }
- public WasInfoBuilder()
- {
- BuildApplicationAllInfoBackgroundWorker = new BackgroundWorker();
- BuildApplicationAllInfoBackgroundWorker.WorkerReportsProgress = true;
- BuildApplicationAllInfoBackgroundWorker.DoWork += BuildApplicationAllInfoBackgroundWorker_DoWork;
- }
- private void BuildApplicationAllInfoBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
- {
- ...
- BuildApplicationAllInfoBackgroundWorker.ReportProgress(10, "- Этап 1");
- ...
- BuildApplicationAllInfoBackgroundWorker.ReportProgress(20, "- Этап 2");
- ...
- }
- public void BuildApplicationAllInfo()
- {
- BuildApplicationAllInfoBackgroundWorker.RunWorkerAsync();
- }
- }
Листинг программы
- private void UpdateWasInfo()
- {
- WasInfoBuilder wasInfoBuilder = new WasInfoBuilder();
- wasInfoBuilder.BuildApplicationAllInfoBackgroundWorker.ProgressChanged += BackgroundWorker_ProgressChanged;
- wasInfoBuilder.BuildApplicationAllInfoBackgroundWorker.RunWorkerCompleted += BackgroundWorker_RunWorkerCompleted;
- wasInfoBuilder.BuildApplicationAllInfo();
- }
- private void BackgroundWorker_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
- {
- ProgressUserControl.ProgressBar.Value = e.ProgressPercentage;
- ProgressUserControl.LogTextBox.AppendText(e.UserState + "\r\n");
- }
Решение задачи: «Передача обработчиков событий в конструктор»
textual
Листинг программы
- public WasInfoBuilder(ProgressChangedEventHandler progressHandler)
- {
- BuildApplicationAllInfoBackgroundWorker = new BackgroundWorker();
- BuildApplicationAllInfoBackgroundWorker.WorkerReportsProgress = true;
- BuildApplicationAllInfoBackgroundWorker.ProgressChanged += progressHandler;
- //...
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д