Передача обработчиков событий в конструктор - C#

Узнай цену своей работы

Формулировка задачи:

Можно ли передавать обработчики событий в конструктор как параметры, если да, то как? Более общая задача. Есть операция, которая длится большой промежуток времени, но её можно разбить на мелкие стадии. Пользователю надо сообщать о прогрессе. Идея такая: на стороне бизнес-логики в класс добавил функционал, чтобы метод (хотя более уместен термин "некая операция"), мог сообщать клиенту о своём прогрессе. Реализовал так. Бизнес-логика.
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");
        }
Подписываться каждый раз на нужные события не очень красиво, подумал, что может можно как-то через параметры передать обработчики. P.S. Если кто-то предложит более простую идею/реализацию буду благодарен

Решение задачи: «Передача обработчиков событий в конструктор»

textual
Листинг программы
        public WasInfoBuilder(ProgressChangedEventHandler progressHandler)
        {
            BuildApplicationAllInfoBackgroundWorker = new BackgroundWorker();
            BuildApplicationAllInfoBackgroundWorker.WorkerReportsProgress = true;
            BuildApplicationAllInfoBackgroundWorker.ProgressChanged += progressHandler;
            //...
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5
Похожие ответы