Поток в программной форме - C#
Формулировка задачи:
Есть такая ситуация:
Есть 1 форма, из неё открываем другую, там вводим числа. На кнопке есть обработчик события (вторая форма кстати создана программно). В этом событии создаётся progressbar и помещается на вторую форму, далее происходят вычисления и на основе их заполняется picturebox из первой формы. Вторая форма закрывается.
По крайней мере так должно было быть. Но так происходит только при отладке программы в пошаговом режиме. И то если правильно расставить точки остановки. А при обычной работе всего этого picturebox не изменяется.
Вот код обработчика кнопки второй формы:
FormAsk - вторая форма
paintLabyrint - заполняет pictureBox
ProgressBar pb = new ProgressBar(); pb.Parent = FormAsk; pb.Bounds = new Rectangle((this.Width - 287) / 2, (this.Height - 33) / 2, 287, 33); n = Convert.ToInt32(TBox1.Text); m = Convert.ToInt32(TBox2.Text); Thread create = new Thread(delegate() { if (FormAsk.IsHandleCreated) { if (pb.InvokeRequired) pb.Invoke((CustomDelegate)delegate() { pb.Visible = true; pb.Value = 0; //progressBar1.Minimum = 0; pb.Maximum = 4 * m * n; }); else { pb.Visible = true; pb.Value = 0; // progressBar1.Minimum = 0; pb.Maximum = 4 * m * n; } } else MessageBox.Show("Это не хорошо"); labyrint = new int[n + 1, m + 1, 3]; for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) for (int k = 0; k < 3; k++) { if (k == 0) labyrint[i, j, k] = 0; else labyrint[i, j, k] = 1; if (pb.InvokeRequired) pb.Invoke((CustomDelegate)delegate() { pb.Value++; }); else pb.Value++; } for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) { if (i == 0 && j == 0) { labyrint[i, j, 0] = 1; entersetted = true; } if (i == 0 && j == m - 1) { labyrint[i, j, 0] = 2; exitsetted = true; } if (i == 0) labyrint[i, j, 2] = 0; if (j == 0) labyrint[i, j, 1] = 0; if (i == n - 1) labyrint[i + 1, j, 2] = 0; if (j == m - 1) labyrint[i, j + 1, 1] = 0; if (pb.InvokeRequired) pb.Invoke((CustomDelegate)delegate() { pb.Value++; }); else pb.Value++; } if (pictureBox1.InvokeRequired) { pictureBox1.Invoke((CustomDelegate)delegate() { paintLabyrint(false); }); } else paintLabyrint(false); }); create.Start(); FormAsk.Close(); }
Решение задачи: «Поток в программной форме»
textual
Листинг программы
(e.Argument as Form).Close();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д