Последовательное выполнение потоков - C# (188819)
Формулировка задачи:
Здравствуйте. Есть два потока. Каждый меняет значение определенного ProgressBar`a. Как сделать так, чтоб второй ProgressBar начал заполнятся только после того, как первый будет заполнен. (Если возможно, это нужно сделать с помощью Mutex)
Данный код выполняется паралельно. Что я делаю неправильно?
Листинг программы
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- using System.Threading;
- namespace Laba5_OS_
- {
- public partial class Form1 : Form
- {
- Mutex mutex = new Mutex();
- public Form1()
- {
- InitializeComponent();
- }
- private void func1()
- {
- mutex.WaitOne();
- for (int i = 0; i < 100; i++)
- {
- progressBar1.Invoke(new Action(() => progressBar1.Value = progressBar1.Value + 1));
- }
- mutex.ReleaseMutex();
- }
- private void func2()
- {
- // mutex.WaitOne();
- for (int i = 0; i < 100; i++)
- {
- progressBar2.Invoke(new Action(() => progressBar2.Value = progressBar2.Value + 1));
- }
- // mutex.ReleaseMutex();
- }
- private void button1_Click(object sender, EventArgs e)
- {
- Thread myThread1 = new Thread(func1);
- Thread myThread2 = new Thread(func2);
- myThread1.Start();
- myThread2.Start();
- }
- }
- }
Решение задачи: «Последовательное выполнение потоков»
textual
Листинг программы
- public partial class Form1 : Form
- {
- Mutex mutex = new Mutex();
- public Form1()
- {
- InitializeComponent();
- }
- private void func1()
- {
- mutex.WaitOne();
- for (int i = 0; i < 100; i++)
- {
- progressBar1.Invoke(new Action(() => progressBar1.Value++));
- Thread.Sleep(10);
- }
- mutex.ReleaseMutex();
- }
- private void func2()
- {
- mutex.WaitOne();
- for (int i = 0; i < 100; i++)
- {
- progressBar2.Invoke(new Action(() => progressBar2.Value++));
- Thread.Sleep(10);
- }
- mutex.ReleaseMutex();
- }
- private void button1_Click(object sender, EventArgs e)
- {
- Thread myThread1 = new Thread(func1);
- Thread myThread2 = new Thread(func2);
- myThread1.Start();
- myThread2.Start();
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д