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

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

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

Исходя из темы, размещенной по соседству, пришел к выводу что для нормальной работы многопоточности с WinForm нужно использовать BackgroundWorker. Но сразу же появляется аналогичная проблема. Как передать в ฺBackgroundWorker метод для исполнения? тучу примеров перерыл... метод, использующий BackgroundWorker в классе Worker.cs
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();
        }
}
P.S. метод Stop() реализован как надо, что-то добавить? program.cs, откуда надо вызвать метод класса Worker.cs и передать ему *****job*******
       
 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();
            }
собственно и вопрос, как передать метод job?

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

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

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


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

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

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