BackgroundWorker просьба выложить пример в 10 потоков - C#

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

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

Добрый вечер. Кому не сложно скиньте пожалуйста простейший пример реализации 10 потоков на backgroundWorker, в интеренте куча примеров, но основаны на 1 потоке. Спасибо. p.s. просьба не постить линк на msdn, статью читал.

Решение задачи: «BackgroundWorker просьба выложить пример в 10 потоков»

textual
Листинг программы
  1. using System;
  2. using System.ComponentModel;
  3. using System.Threading;
  4.  
  5. class Program
  6. {
  7.     const int ThreadCount = 10;
  8.  
  9.     static readonly Random r = new Random();
  10.     static readonly object sync = new object();
  11.     static readonly CountdownEvent countdown = new CountdownEvent(ThreadCount);
  12.     static readonly BackgroundWorker[] workers = new BackgroundWorker[ThreadCount];
  13.  
  14.     static void Main(string[] args)
  15.     {
  16.         Console.CursorVisible = false;
  17.         Console.WriteLine("Starting the workers...");
  18.  
  19.         for (int i = 0; i < workers.Length; i++)
  20.         {
  21.             workers[i] = new BackgroundWorker();
  22.             workers[i].WorkerSupportsCancellation = true;
  23.             workers[i].WorkerReportsProgress = true;
  24.             workers[i].DoWork += DoWork;
  25.             workers[i].ProgressChanged += ProgressChanged;
  26.             workers[i].RunWorkerCompleted += RunWorkerCompleted;
  27.             workers[i].RunWorkerAsync(i + 1);
  28.         }
  29.  
  30.         while (!countdown.Wait(TimeSpan.FromMilliseconds(100)))
  31.             if (Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.Escape)
  32.                 Array.ForEach(workers, w => w.CancelAsync());
  33.  
  34.         Console.SetCursorPosition(0, workers.Length + 1);
  35.         Console.ResetColor();
  36.         Console.WriteLine("All workers finished!\r\nPress any key to continue...");
  37.         Console.ReadKey(true);
  38.     }
  39.  
  40.     static void DoWork(object sender, DoWorkEventArgs e)
  41.     {
  42.         var worker = sender as BackgroundWorker;
  43.         e.Result = e.Argument;
  44.  
  45.         int progress = 0;
  46.         do
  47.         {
  48.             worker.ReportProgress(progress, e.Argument);
  49.             int interval;
  50.             lock (r) interval = r.Next(1000);
  51.             Thread.Sleep(interval);
  52.         } while (progress++ < 100 && !worker.CancellationPending);
  53.     }
  54.  
  55.     static void ProgressChanged(object sender, ProgressChangedEventArgs e)
  56.     {
  57.         int x = e.ProgressPercentage * 40 / 100 + 5;
  58.         int y = (int)e.UserState;
  59.         var color = (ConsoleColor)(y + 1 % Enum.GetValues(typeof(ConsoleColor)).Length);
  60.  
  61.         lock (sync)
  62.         {
  63.             Console.ForegroundColor = color;
  64.             Console.SetCursorPosition(0, y);
  65.             Console.Write("{0,3}%", e.ProgressPercentage);
  66.             Console.SetCursorPosition(x, y);
  67.             Console.Write('\u2592');
  68.         }
  69.     }
  70.  
  71.     static void RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  72.     {
  73.         countdown.Signal();
  74.     }
  75. }

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


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

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

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

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

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

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