Передача обработчиков событий в конструктор - 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; //... }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д