Передача обработчиков событий в конструктор - 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;
//...
}