进度条未达到100%

时间:2014-12-15 09:52:24

标签: c# visual-studio-2008 progress-bar

我有三个嵌套" for"循环,我在其中执行一些操作。我想更新一个进度,以便它在最外层循环开始时开始,并在最外层循环结束时结束。 这是我所做的一个例子:

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。 我记录了进度的值,我完全得到了我的期望:

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%但是,如果我改变内部&#34; for&#34;循环我需要一个比125更大的值来看到进展到最后的进展。 无论内循环中的操作如何,如何设置此值以解决此问题?

谢谢

1 个答案:

答案 0 :(得分:2)

看起来你的方法UpdateProgressTo应该将进度设置为发送的值。

所以它应该是 progress.Value = value; (而不是+ =)