esativar a animação da barra de progresso do .NET ao alterar o valo
Eu percebo que existem outras perguntas sobre SO relacionadas a animações e barras de progresso, mas elas parecem girar em torno de se livrar da animação desenhada em cima da barra de progresso, ou seja. o destaque que passa por ele.
O que eu quero fazer é me livrar da animação que é usada quando eu defino o novo valor da barra de progresso. O problema que tenho agora é que a ação em execução é concluída e a barra de progresso continua a aumentar até a posição máximadepois d a ação foi concluída.
Em outras palavras, se eu definir a propriedade Value da barra de progresso como 50, desejo que ela viaje para a posição intermediária (se o máximo for 100) imediatamente, não construa lentamente a barra de progresso para essa posição, como faz agor
Se houver realmente uma pergunta sobre SO que já lide com isso, basta fechar como duplicada e eu vou excluí-la com prazer, mas não consegui encontrar nenhum
Este foi o que encontrei:Desativando a animação ProgressFor da WinForms, e lida com o destaque animado, e não é disso que estou falando.
Aqui está um simples LINQPad demonstração que mostra o problema:
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();
}
}
Edit 1: Este é o Windows 7, tema do Glass, então sim, aposto que isso é específico para 7 ou possivelmente também para o Vist
Aqui está uma animação GIF que mostra o problema, o projeto acima. Você pode ver que, assim que o botão é ativado, 1 segundo após a marca do meio ter sido definida, a barra de progresso anima até 100%,depois d o botão foi ativado.
Como você pode ver acima, redefinir o botão para ativado e definir a barra de progresso para 100 é feito "ao mesmo tempo". Basicamente, não quero a criação progressiva da barra de progresso, quero que ela salte diretamente para 50% e depois para 100% ao mesmo tempo em que o botão é ativad
Edit 2: Em resposta à resposta de David Heffernan, foi assim que alterei o código acima:
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; }));