(抱歉标题不太好,我不确定如何解决我的问题,因此我需要问什么问题:)
语境
我使用进度条来通知用户任务的进度。该任务实际上分两个步骤完成,每个步骤大约需要执行总时间的一半。我只知道第二个任务在开始之前的长度(因为它取决于上一个任务的结果),所以我无法知道一开始的最大进度。这就是为什么我在第二个任务之前更改进度条的最大进度。
这基本上是我的做法:
// 1st step
progressBar.Maximum = step1Objects.Count * 2; // "2" because the step will take
// half of the total process
progressBar.Value = 0;
foreach (SomeObject step1Object in step1Objects) {
// Build step2Objects
progressBar.Value = ++progress;
}
// At this moment, the progress bar is half filled
// 2nd step
progressBar.Maximum = step2Objects.Count * 2;
progressBar.Value = step2Objects.Count;
// When we start this step, the progress bar is already half filled
foreach (SomeObject step2Object in step2Objects) {
// Do something
progressBar.Value = ++progress;
}
// At this moment, the progress bar is totally filled
问题
当我到达这条线时:
progressBar.Maximum = step2Objects.Count * 2;
...进度条有一小会儿不再填满一半,因为step1Objects.Count
与 相比非常少step2Objects.Count
。所以进度条做了类似的事情(这就是用户看到的):
> |
=> |
==> |
===> |
====> |
=====> | End of step 1
=> | progressBar.Maximum = step2Objects.Count * 2;
=====> | progressBar.Value = step2Objects.Count;
======> |
=======> |
========> |
=========> |
==========>|
问题
如何避免这种“故障”?
我认为要做的是在两个步骤之间停止刷新进度条。我在想像 BeginUpdate / EndUpdate这样的东西,但进度条似乎不存在......