У меня есть три вложенных цикла "for", в которых я выполняю некоторые операции. Я хочу обновить прогресс, чтобы он начинался, когда начинается самый внешний цикл, и заканчивается, когда конец внешнего контура завершается. Это пример того, что я сделал:Progressbar не достигает 100%
for (int x= front; x<= back; x++)
{
for (int y= top; y<= bottom; y++)
{
for (int z= left; z<= right; z++)
{
//operations
}
}
uploadProgressView.UpdateProgressTo((100 * (float)(x- front))/(back - front + 1));
}
где:
public void UpdateProgressTo(int value)
{
progress.Value = value;
progress.Refresh();
Application.DoEvents();
}
Я получаем, что прогресс не достигнет 100%. Прогресса ProgressBar.Maximum установлен в 100 и ProgressBar.Step устанавливается в 1. I вошел значение прогресса и я получил именно то, что я ожидал:
0
1,333333
2,666667
4
5,333333
6,666667
8
9,333333
10,66667
12
13,33333
14,66667
16
17,33333
18,66667
20
21,33333
22,66667
24
25,33333
26,66667
28
29,33333
30,66667
32
33,33333
34,66667
36
37,33333
38,66667
40
41,33333
42,66667
44
45,33333
46,66667
48
49,33333
50,66667
52
53,33333
54,66667
56
57,33333
58,66667
60
61,33333
62,66667
64
65,33334
66,66666
68
69,33334
70,66666
72
73,33334
74,66666
76
77,33334
78,66666
80
81,33334
82,66666
84
85,33334
86,66666
88
89,33334
90,66666
92
93,33334
94,66666
96
97,33334
98,66666
Почему прогресс не достигает 100%, даже если значения хорошо рассчитаны, я заставляю обновление прогресса, и я вызываю Application.DoEvents() каждый раз, когда я обновляю значение прогресса? Я судимый заменить эту строку
uploadProgressView.UpdateProgressTo((100 * (float)(x- front))/(back - front + 1));
с этим
uploadProgressView.UpdateProgressTo((125 * (float)(x- front))/(back - front + 1));
и прогресс достигнет 100%, но, если я изменю операции внутри внутреннего «для» петли мне нужно гораздо больше значение 125, чтобы увидеть прогресс, достигнутый до конца. Как установить это значение, чтобы исправить эту проблему, независимо от операций во внутреннем цикле?
Спасибо
Если вы попытаетесь обновить поток пользовательского интерфейса, ваше приложение ничего не покажет, пока оно не завершит обработку, это может быть причиной того, что он показывает 100% -ный прогресс. Вы можете использовать BackgroundWorker как ссылку, совместно используемую Aron. – mgigirey