Несколько Progress Bar ов - C#

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

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

Всем привет. У меня есть форма, на которой юзер вводит некое неотрицательное число и, по нажатии на кнопку, появляются Progress Bar'ы в количестве заданном пользователем. Задача состоит в том, что бы поочерёдно "заполнить" эти бары, один за другим. В обработчике кнопки я создаю новый список объектов прогрессбара и заполняю его новыми объектами. Потом обновляю форму и в цикле вызываю метод, который "заполняет" бар, номер которого я отдаю ему в аргументе. Проблема в том, что каждый бар как-бы не выполняет последний шаг, оставаясь незаполненным до конца. Полностью все бары заполняются одновременно в конце работы цикла и метода. Вот код:
List<ProgressBar> progressBarList;
        public Form1() {
            InitializeComponent();
        }
 
        private void startButton_Click(object sender, EventArgs e) {
            int controlCount = int.Parse(processCountTB.Text);
            progressBarList = new List<ProgressBar>(controlCount);
            Random rnd = new Random(System.DateTime.Today.Millisecond);
            ProgressBar newProgressBar;
            for (int i = 0; i < controlCount; i++) {
                newProgressBar = new ProgressBar();
                newProgressBar.Location = new Point(10, (i + 1) * 40);
                newProgressBar.Visible = true;
                newProgressBar.Height = 20;
                newProgressBar.Width = 200;
                newProgressBar.Minimum = 0;
                newProgressBar.Maximum = rnd.Next(0, 100);
                newProgressBar.Step = 5;
 
                Controls.Add(newProgressBar);
                newProgressBar.Show();
                progressBarList.Add(newProgressBar);
            }
            this.Refresh();
            int curProcess = 0;
            while (curProcess < controlCount) {
                runProcess(curProcess);
                curProcess++;
            }
        }
        public void runProcess(int curProcess) {
            do {
                System.Threading.Thread.Sleep(100);
                progressBarList[curProcess].PerformStep();
            } while (progressBarList[curProcess].Value < progressBarList[curProcess].Maximum);
        }
Не могу понять в чём дело, может есть у кого какие-то мысли?

Решение задачи: «Несколько Progress Bar ов»

textual
Листинг программы
ThreadPool.QueueUserWorkItem(
                unused =>
                {
                    int curProcess = 0;
                    while (curProcess < controlCount)
                    {
                        runProcess(curProcess);
                        curProcess++;
                    }
                });

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


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

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

13   голосов , оценка 3.538 из 5