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

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

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

Можно ли передавать обработчики событий в конструктор как параметры, если да, то как? Более общая задача. Есть операция, которая длится большой промежуток времени, но её можно разбить на мелкие стадии. Пользователю надо сообщать о прогрессе. Идея такая: на стороне бизнес-логики в класс добавил функционал, чтобы метод (хотя более уместен термин "некая операция"), мог сообщать клиенту о своём прогрессе. Реализовал так. Бизнес-логика.
Листинг программы
  1. public class WasInfoBuilder
  2. {
  3. public BackgroundWorker BuildApplicationAllInfoBackgroundWorker { get; set; }
  4. public WasInfoBuilder()
  5. {
  6. BuildApplicationAllInfoBackgroundWorker = new BackgroundWorker();
  7. BuildApplicationAllInfoBackgroundWorker.WorkerReportsProgress = true;
  8. BuildApplicationAllInfoBackgroundWorker.DoWork += BuildApplicationAllInfoBackgroundWorker_DoWork;
  9. }
  10. private void BuildApplicationAllInfoBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
  11. {
  12. ...
  13. BuildApplicationAllInfoBackgroundWorker.ReportProgress(10, "- Этап 1");
  14. ...
  15. BuildApplicationAllInfoBackgroundWorker.ReportProgress(20, "- Этап 2");
  16. ...
  17. }
  18. public void BuildApplicationAllInfo()
  19. {
  20. BuildApplicationAllInfoBackgroundWorker.RunWorkerAsync();
  21. }
  22. }
Клиент.
Листинг программы
  1. private void UpdateWasInfo()
  2. {
  3. WasInfoBuilder wasInfoBuilder = new WasInfoBuilder();
  4. wasInfoBuilder.BuildApplicationAllInfoBackgroundWorker.ProgressChanged += BackgroundWorker_ProgressChanged;
  5. wasInfoBuilder.BuildApplicationAllInfoBackgroundWorker.RunWorkerCompleted += BackgroundWorker_RunWorkerCompleted;
  6. wasInfoBuilder.BuildApplicationAllInfo();
  7. }
  8. private void BackgroundWorker_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
  9. {
  10. ProgressUserControl.ProgressBar.Value = e.ProgressPercentage;
  11. ProgressUserControl.LogTextBox.AppendText(e.UserState + "\r\n");
  12. }
Подписываться каждый раз на нужные события не очень красиво, подумал, что может можно как-то через параметры передать обработчики. P.S. Если кто-то предложит более простую идею/реализацию буду благодарен

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

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

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


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

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

5   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы