我意识到有关于动画和进度条的其他问题,但它们似乎围绕着摆脱进度条顶部绘制的动画,即。它的亮点在于它。更改值时禁用.NET progressbar动画?
我想要做的是摆脱当我设置进度栏的新值时使用的动画。我现在遇到的问题是正在运行的操作完成,然后进度条继续增加,直到操作完成后,它的最大位置为。
换句话说,如果我将进度条的Value属性设置为50,我希望它立即到达中间位置(如果max为100),不会像现在那样缓慢地建立进度条到该位置。
如果确实存在一个关于SO的问题,已经处理了这个问题,只需重复一次即可,我很乐意将其删除,但我找不到任何问题。
这是我找到的那个:Disabling WinForms ProgressBar animation,它处理的是动画的亮点,这不是我说的。
下面是一个简单LINQPad演示,显示问题:
void Main()
{
using (var fm = new Form())
{
var bt = new Button
{
Text = "Start",
Location = new Point(8, 8),
Parent = fm,
};
var pb = new ProgressBar
{
Top = bt.Top + bt.Height + 8,
Width = fm.ClientRectangle.Width - 16,
Left = 8,
Parent = fm
};
bt.Click += (s, e) =>
{
bt.Enabled = false;
Thread t = new Thread(new ThreadStart(() =>
{
Thread.Sleep(1000);
bt.BeginInvoke(new Action(() => { pb.Value = 50; }));
Thread.Sleep(1000);
bt.BeginInvoke(new Action(() => { pb.Value = 100; }));
bt.BeginInvoke(new Action(() => { bt.Enabled = true; }));
}));
t.Start();
};
fm.ShowDialog();
}
}
编辑1:这是Windows 7中,玻璃的主题,所以是的,我敢肯定,这是特定于7或者也可能Vista系统。
下面是一个GIF动画,显示问题,从上面的项目。您可以看到,只要启用该按钮,中途标记设置后1秒,进度条动画高达100%,后该按钮已启用。
正如您在上面看到的,将按钮设置为启用并将进度条设置为100会“同时”完成。基本上,我不希望逐步积累进度条,我希望它在启用按钮的同时直接跳到50%,然后再跳到100%。
编辑2:针对大卫赫弗南的答案,这是我改变了上面的代码:
bt.BeginInvoke(new Action(() => { pb.Value = 51; pb.Value = 50; }));
Thread.Sleep(1000);
bt.BeginInvoke(new Action(() => { pb.Maximum = 101; pb.Value = 101;
pb.Maximum = 100; pb.Value = 100; }));
这立即转到一半标志;没有建立起来。在XP上;可能是操作系统特定的你在Vista/7上? – 2011-03-16 22:35:25
这是Windows 7,64位,让我编辑问题并发布示例视频。此外,感谢您添加该标签:) – 2011-03-16 22:45:49
这很有趣,我偶然发现这个问题,认为我的代码有一段延迟,因为动画实际启动需要大约100ms。 – 2011-09-01 05:48:18