ProgressBar重置率为60%

我有这个代码:

for(int k = 0; k<11; k++) { pBar.Maximum = 10; pBar.Value = k; if (pBar.Maximum == k) pBar.Value = 0; } 

但是,问题是,当大约60%已满时,进度条会重置。 如何确保进度条在重置之前完全填满?

第一:没有任何理由在每个interarion上分配pBar.Maximum 。 做就是了:

 pBar.Maximum = 10; for(int k = 0; k<11; k++) { pBar.Value = k; if (pBar.Maximum == k) pBar.Value = 0; } 

第二:您的代码导致阻塞迭代。 它无法正常行事。 使用multithreading并根据某些event更改进度valuetick任何内容,而不是循环,就像在此处完成一样。

如果切换到经典模式,这个故障就会消失。 在重置之前,进度条将完全显示。

这是因为在经典模式下,绘制操作是同步的并且在Value设置器返回之前完成,但是在主题模式中,当您增加值时会播放某种动画,并且需要一些时间来播放。

相反,当你减小值时,就没有动画; 进度条立即缩小。

这就是为什么它只显示大约60%的满:在进度条有时间绘制最后几个增量的动画之前减小值(立即完成)。

 pBar.Maximum = 10; int count = 0; Timer timer = new Timer(); timer.Interval = 1000; timer.Tick += (source, e) => { pBar.Value = count; if (pBar.Maximum == count) { pBar.Value = 0; timer.Stop(); } count++; } timer.Start(); 

你的问题是你正在使用循环。 您需要使用计时器,以便程序有时间执行检查/分配并更新屏幕。

代码用一个调用循环体的计时器替换for循环。 由于计时器没有索引变量,因此它会在计时器(计数)之外进行初始化,并随每个计时器更新。

我终于找到了解决这个问题的方法,并在这里写了一下 。 这个想法来自于这个问题。

  progressBar1.Value = e.ProgressPercentage; if (e.ProgressPercentage != 0)   progressBar1.Value = e.ProgressPercentage - 1; progressBar1.Value = e.ProgressPercentage; if (progressBar1.Maximum == e.ProgressPercentage)   progressBar1.Value = 0;