Передача метода в класс BackgroundWorker - C#
Формулировка задачи:
Исходя из темы, размещенной по соседству, пришел к выводу что для нормальной работы многопоточности с WinForm нужно использовать BackgroundWorker.
Но сразу же появляется аналогичная проблема. Как передать в ฺBackgroundWorker метод для исполнения?
тучу примеров перерыл...
метод, использующий BackgroundWorker в классе Worker.cs
P.S. метод Stop() реализован как надо, что-то добавить?
program.cs, откуда надо вызвать метод класса Worker.cs и передать ему *****job*******
собственно и вопрос, как передать метод job?
Листинг программы
- class Worker
- {
- static readonly BackgroundWorker[] workers = new BackgroundWorker[threadCount];
- public static int threadCount { get; set; }
- public void doWork(*****job*******)
- {
- while (true)
- {
- Console.WriteLine("Starting {0} threads...", threadCount);
- for (int i = 0; i < threadCount; i++)
- {
- workers[i] = new BackgroundWorker();
- workers[i].WorkerSupportsCancellation = true;
- workers[i].WorkerReportsProgress = true;
- workers[i].DoWork += *****job*******;
- workers[i].ProgressChanged += ProgressChanged;
- workers[i].RunWorkerCompleted += RunWorkerCompleted;
- workers[i].RunWorkerAsync(i + 1);
- }
- }
- }
- public void Stop()
- {
- foreach (var w in workers)
- {
- w.CancelAsync();
- w.Dispose();
- }
- GC.Collect();
- }
- }
Листинг программы
- public class Program
- {
- public static int j = 0;
- static void Job(object arg)
- {
- Worker worker = new Worker();
- Random r = new Random();
- Console.WriteLine("Thread {0} is working...", Thread.CurrentThread.ManagedThreadId);
- for (int i = 0; i < 5; i++)
- {
- j++;
- Console.WriteLine("j = {0}", j);
- Thread.Sleep(r.Next(500, 1000));
- if (j == 50)
- {
- worker.Stop();
- Console.WriteLine("STOP");
- }
- }
- wh.Set();
- }
- static void Main(string[] args)
- {
- Worker worker = new Worker();
- Worker.threadCount = 5;
- worker.doWork(Job);
- Console.ReadLine();
- }
Решение задачи: «Передача метода в класс BackgroundWorker»
textual
Листинг программы
- private void Start_btn_Click(object sender, EventArgs e)
- {
- Worker worker = new Worker();
- worker.doWork(Job);
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д