BackgroundWorker просьба выложить пример в 10 потоков - C#
Формулировка задачи:
Добрый вечер.
Кому не сложно скиньте пожалуйста простейший пример реализации 10 потоков на backgroundWorker, в интеренте куча примеров, но основаны на 1 потоке.
Спасибо.
p.s. просьба не постить линк на msdn, статью читал.
Решение задачи: «BackgroundWorker просьба выложить пример в 10 потоков»
textual
Листинг программы
using System; using System.ComponentModel; using System.Threading; class Program { const int ThreadCount = 10; static readonly Random r = new Random(); static readonly object sync = new object(); static readonly CountdownEvent countdown = new CountdownEvent(ThreadCount); static readonly BackgroundWorker[] workers = new BackgroundWorker[ThreadCount]; static void Main(string[] args) { Console.CursorVisible = false; Console.WriteLine("Starting the workers..."); for (int i = 0; i < workers.Length; i++) { workers[i] = new BackgroundWorker(); workers[i].WorkerSupportsCancellation = true; workers[i].WorkerReportsProgress = true; workers[i].DoWork += DoWork; workers[i].ProgressChanged += ProgressChanged; workers[i].RunWorkerCompleted += RunWorkerCompleted; workers[i].RunWorkerAsync(i + 1); } while (!countdown.Wait(TimeSpan.FromMilliseconds(100))) if (Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.Escape) Array.ForEach(workers, w => w.CancelAsync()); Console.SetCursorPosition(0, workers.Length + 1); Console.ResetColor(); Console.WriteLine("All workers finished!\r\nPress any key to continue..."); Console.ReadKey(true); } static void DoWork(object sender, DoWorkEventArgs e) { var worker = sender as BackgroundWorker; e.Result = e.Argument; int progress = 0; do { worker.ReportProgress(progress, e.Argument); int interval; lock (r) interval = r.Next(1000); Thread.Sleep(interval); } while (progress++ < 100 && !worker.CancellationPending); } static void ProgressChanged(object sender, ProgressChangedEventArgs e) { int x = e.ProgressPercentage * 40 / 100 + 5; int y = (int)e.UserState; var color = (ConsoleColor)(y + 1 % Enum.GetValues(typeof(ConsoleColor)).Length); lock (sync) { Console.ForegroundColor = color; Console.SetCursorPosition(0, y); Console.Write("{0,3}%", e.ProgressPercentage); Console.SetCursorPosition(x, y); Console.Write('\u2592'); } } static void RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { countdown.Signal(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д