我有这段代码:
for(int k = 0; k<11; k++)
{
pBar.Maximum = 10;
pBar.Value = k;
if (pBar.Maximum == k)
pBar.Value = 0;
}
然而,问题是,当大约60%已满时,进度条会重置。如何确保进度条在重置之前完全填满?
答案 0 :(得分:2)
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循环。由于计时器没有索引变量,因此它在计时器(计数)之外进行初始化,并随每个计时器更新。
答案 1 :(得分:2)
首先:没有任何理由在每个interarion 上分配pBar.Maximum
。
只是做:
pBar.Maximum = 10;
for(int k = 0; k<11; k++)
{
pBar.Value = k;
if (pBar.Maximum == k)
pBar.Value = 0;
}
第二:您的代码导致阻止迭代。它无法正常行事。使用多线程并根据某些value
,event
更改进度tick
,而不是循环,就像在此处完成一样。
答案 2 :(得分:2)
如果切换到经典模式,此故障将消失。在重置之前,进度条将完全显示。
这是因为在经典模式下,绘制操作是同步的并且在Value
setter返回之前完成,但在主题模式下,当你增加值时会播放某种动画,这需要一些是时候玩了。
相反,当你减小值时,没有动画;进度条立即缩小。
这就是为什么它只显示大约60%的满:在进度条有时间绘制最后几个增量的动画之前减小值(立即完成)。
答案 3 :(得分:1)