Передача метода в класс BackgroundWorker - C#

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

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

Исходя из темы, размещенной по соседству, пришел к выводу что для нормальной работы многопоточности с WinForm нужно использовать BackgroundWorker. Но сразу же появляется аналогичная проблема. Как передать в ฺBackgroundWorker метод для исполнения? тучу примеров перерыл... метод, использующий BackgroundWorker в классе Worker.cs
Листинг программы
  1. class Worker
  2. {
  3. static readonly BackgroundWorker[] workers = new BackgroundWorker[threadCount];
  4. public static int threadCount { get; set; }
  5. public void doWork(*****job*******)
  6. {
  7. while (true)
  8. {
  9. Console.WriteLine("Starting {0} threads...", threadCount);
  10. for (int i = 0; i < threadCount; i++)
  11. {
  12. workers[i] = new BackgroundWorker();
  13. workers[i].WorkerSupportsCancellation = true;
  14. workers[i].WorkerReportsProgress = true;
  15. workers[i].DoWork += *****job*******;
  16. workers[i].ProgressChanged += ProgressChanged;
  17. workers[i].RunWorkerCompleted += RunWorkerCompleted;
  18. workers[i].RunWorkerAsync(i + 1);
  19. }
  20. }
  21. }
  22. public void Stop()
  23. {
  24. foreach (var w in workers)
  25. {
  26. w.CancelAsync();
  27. w.Dispose();
  28. }
  29. GC.Collect();
  30. }
  31. }
P.S. метод Stop() реализован как надо, что-то добавить? program.cs, откуда надо вызвать метод класса Worker.cs и передать ему *****job*******
Листинг программы
  1. public class Program
  2. {
  3. public static int j = 0;
  4. static void Job(object arg)
  5. {
  6. Worker worker = new Worker();
  7. Random r = new Random();
  8. Console.WriteLine("Thread {0} is working...", Thread.CurrentThread.ManagedThreadId);
  9. for (int i = 0; i < 5; i++)
  10. {
  11. j++;
  12. Console.WriteLine("j = {0}", j);
  13. Thread.Sleep(r.Next(500, 1000));
  14. if (j == 50)
  15. {
  16. worker.Stop();
  17. Console.WriteLine("STOP");
  18. }
  19. }
  20. wh.Set();
  21. }
  22. static void Main(string[] args)
  23. {
  24. Worker worker = new Worker();
  25. Worker.threadCount = 5;
  26. worker.doWork(Job);
  27. Console.ReadLine();
  28. }
собственно и вопрос, как передать метод job?

Решение задачи: «Передача метода в класс BackgroundWorker»

textual
Листинг программы
  1.  
  2.         private void Start_btn_Click(object sender, EventArgs e)
  3.         {
  4.             Worker worker = new Worker();
  5.             worker.doWork(Job);
  6.         }

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


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

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

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

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

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

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