进度条未达到 100%

本文关键字:100% 未达到 | 更新日期: 2023-09-27 18:34:17

我有三个嵌套的"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%。进度条.最大值设置为 100,进度条.步长设置为 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%,但是,如果我更改内部"for"循环中的操作,我需要比 125 大得多的值才能看到进度进展到最后。如何设置此值以解决此问题,而不考虑内部循环中的操作?

谢谢

进度条未达到 100%

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

所以应该是进展。值 = 值;(而不是 +=(