2014-12-15 2 views
0

У меня есть три вложенных цикла "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, чтобы увидеть прогресс, достигнутый до конца. Как установить это значение, чтобы исправить эту проблему, независимо от операций во внутреннем цикле?

Спасибо

+0

Если вы попытаетесь обновить поток пользовательского интерфейса, ваше приложение ничего не покажет, пока оно не завершит обработку, это может быть причиной того, что он показывает 100% -ный прогресс. Вы можете использовать BackgroundWorker как ссылку, совместно используемую Aron. – mgigirey

ответ

2

Похоже, ваш метод UpdateProgressTo предполагается установить прогресс на значение посланного.

поэтому должно быть progress.Value = значение; (вместо + =)

+0

Извините, я допустил ошибку в тексте, в моем коде есть прогресс.Value = значение. Я редактирую его. Другие идеи? спасибо – MartinaLabMath

Смежные вопросы