gpt4 book ai didi

.net - 更改值时禁用 .NET 进度条动画?

转载 作者:行者123 更新时间:2023-12-02 11:50:48 28 4
gpt4 key购买 nike

我意识到关于动画和进度条还有其他问题,但它们似乎围绕着摆脱进度条顶部绘制的动画,即。穿过它的亮点。

我想要做的是摆脱当我设置进度条的新值时使用的动画。我现在遇到的问题是,正在运行的操作完成,然后进度条在操作完成后继续增加到其最大位置

换句话说,如果我将进度条的 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 Glass 主题,所以是的,我打赌这是特定于 7 或可能也是 Vista 的。

这是一个显示问题的 GIF 动画,即上面的项目。您可以看到,按钮一旦启用,即设置一半标记后 1 秒,按钮启用后进度条动画就会达到 100%。

正如您在上面看到的,将按钮设置回启用状态并将进度条设置为 100 是“同时”完成的。基本上,我不希望进度条逐渐累积,我希望它在按钮启用的同时直接跳到 50%,然后跳到 100%。

LINQPad demo

<小时/>

编辑2:为了回应David Heffernan的回答,这就是我更改上述代码的方式:

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; }));

最佳答案

此动画功能是在 Vista 中随 Aero 主题引入的。

不过有一个解决方法。如果向后移动进度,则不会显示动画。因此,如果您希望它立即增加 50,请将 Value 增加 51,然后立即减少 1。

当接近 100% 时,您会陷入冲突,因为您无法将 Value 设置为 101(我假设 Maximum 设置为 100)。相反,将最大值设置为 1000,例如,增加到 1000,减少到 999,然后返回到 1000。

无论如何,这有点奇怪,但它确实有一个好处,可以给你带来想要的效果!

关于.net - 更改值时禁用 .NET 进度条动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5332616/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com