Я понимаю, что в SO есть и другие вопросы, касающиеся анимации и индикаторов выполнения, но они, похоже, вращаются вокруг избавления от анимации, отображаемой поверх индикатора выполнения, т.е.выделение, которое перемещается по нему.
Я хочу избавиться от анимации, которая используется, когда я устанавливаю новое значение индикатора выполнения.У меня сейчас проблема в том, что выполняемое действие завершается, а затем индикатор выполнения продолжает увеличиваться до своего максимального положения после действия завершено.
Другими словами, если яустановите для свойства Value индикатора выполнения значение 50, я хочу, чтобы оно сразу же переместилось на полпути (если макс. 100), а не медленно переводите индикатор выполнения в это положение, как сейчас.
Если естьна самом деле вопрос о SO, который уже имеет дело с этим, просто закройте как дубликат, и я с радостью удалю его, но я не смог его найти.
Это тот, который я нашел: Отключение анимации WinForms ProgressBar, и он имеет дело с анимацией подсветки, и я не об этом говорю.
Вот простая 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-анимация, которая показываетTПроблема, проект сверху.Вы можете видеть, что, как только кнопка становится активной, через 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; }));