Передача метода в класс 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);
}