我意識到有關於動畫和進度條的其他問題,但它們似乎圍繞着擺脫進度條頂部繪製的動畫,即。它的亮點在於它。更改值時禁用.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