Последовательное выполнение потоков - C# (188819)

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

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

Здравствуйте. Есть два потока. Каждый меняет значение определенного ProgressBar`a. Как сделать так, чтоб второй ProgressBar начал заполнятся только после того, как первый будет заполнен. (Если возможно, это нужно сделать с помощью Mutex) Данный код выполняется паралельно. Что я делаю неправильно?
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using System.Threading;
  11. namespace Laba5_OS_
  12. {
  13. public partial class Form1 : Form
  14. {
  15. Mutex mutex = new Mutex();
  16. public Form1()
  17. {
  18. InitializeComponent();
  19. }
  20. private void func1()
  21. {
  22. mutex.WaitOne();
  23. for (int i = 0; i < 100; i++)
  24. {
  25. progressBar1.Invoke(new Action(() => progressBar1.Value = progressBar1.Value + 1));
  26. }
  27. mutex.ReleaseMutex();
  28. }
  29. private void func2()
  30. {
  31. // mutex.WaitOne();
  32. for (int i = 0; i < 100; i++)
  33. {
  34. progressBar2.Invoke(new Action(() => progressBar2.Value = progressBar2.Value + 1));
  35. }
  36. // mutex.ReleaseMutex();
  37. }
  38. private void button1_Click(object sender, EventArgs e)
  39. {
  40. Thread myThread1 = new Thread(func1);
  41. Thread myThread2 = new Thread(func2);
  42. myThread1.Start();
  43. myThread2.Start();
  44. }
  45. }
  46. }

Решение задачи: «Последовательное выполнение потоков»

textual
Листинг программы
  1.     public partial class Form1 : Form
  2.     {
  3.         Mutex mutex = new Mutex();
  4.  
  5.         public Form1()
  6.         {
  7.             InitializeComponent();
  8.         }
  9.  
  10.         private void func1()
  11.         {
  12.             mutex.WaitOne();
  13.  
  14.             for (int i = 0; i < 100; i++)
  15.             {
  16.                 progressBar1.Invoke(new Action(() => progressBar1.Value++));
  17.                 Thread.Sleep(10);
  18.             }
  19.  
  20.             mutex.ReleaseMutex();
  21.         }
  22.  
  23.         private void func2()
  24.         {
  25.             mutex.WaitOne();
  26.  
  27.             for (int i = 0; i < 100; i++)
  28.             {
  29.                 progressBar2.Invoke(new Action(() => progressBar2.Value++));
  30.                 Thread.Sleep(10);
  31.             }
  32.  
  33.             mutex.ReleaseMutex();
  34.         }
  35.  
  36.         private void button1_Click(object sender, EventArgs e)
  37.         {
  38.             Thread myThread1 = new Thread(func1);
  39.             Thread myThread2 = new Thread(func2);
  40.             myThread1.Start();
  41.             myThread2.Start();
  42.         }
  43.     }

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


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

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

12   голосов , оценка 3.75 из 5

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

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

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