Como você mostrar GIFs animados em um Windows Form (c #)
-
03-07-2019 - |
Pergunta
Eu tenho um formulário mostrando mensagens de progresso como um processo bastante longas. É uma chamada para um serviço web, então não posso realmente mostrar uma percentagem concluída em uma barra de progresso significativamente. (Eu não gosto particularmente a propriedade Marquee da barra de progresso)
Gostaria de mostrar um GIF animado para dar o processo a sensação de alguma atividade (por exemplo, arquivos voando de um computador para outro como processo de cópia de Windows).
Como você faz isso?
Solução
Não é muito difícil.
- Solte um picturebox para seu formulário.
- Adicione o arquivo .gif como a imagem na picturebox
- Mostrar o picturebox quando você está carregando.
coisas a ter em consideração:
- A desativação do picturebox irá impedir que o gif de ser animado.
GIFs animados:
Se você está procurando gifs animados você pode gerá-los aqui
Outra forma de fazê-lo:
Outra forma que eu descobri que funciona muito bem é o controle de diálogo assíncrono que eu encontrei na projeto de código
Outras dicas
Eu tive o mesmo problema. formulário inteiro (incluindo GIF) parando para redesenhar próprio por causa do trabalho de operação longa em segundo plano. Aqui está como eu resolver isso.
private void MyThreadRoutine()
{
this.Invoke(this.ShowProgressGifDelegate);
//your long running process
System.Threading.Thread.Sleep(5000);
this.Invoke(this.HideProgressGifDelegate);
}
private void button1_Click(object sender, EventArgs e)
{
ThreadStart myThreadStart = new ThreadStart(MyThreadRoutine);
Thread myThread = new Thread(myThreadStart);
myThread.Start();
}
Eu simplesmente criou outro segmento a ser responsável por esta operação. Graças a esta forma inicial continua redesenhar sem problemas (incluindo o meu gif trabalho). ShowProgressGifDelegate e HideProgressGifDelegate são delegados na forma que a propriedade visível conjunto de pictureBox com gif de verdadeiro / falso.
Note que no Windows, você tradicionalmente não usar GIFs animados, mas pequenas animações AVI: há um controle nativo do Windows apenas para exibi-los. Há ainda ferramentas para converter GIFs animados para AVI (e vice-versa).
Se você colocá-lo em um controle PictureBox, ele deverá funcionar
Não faz quando você iniciar uma operação longa para trás, porque tudo pára desde que você está no mesmo segmento.
Eu tive o mesmo problema e me deparei com diferentes soluções através da implementação que eu usei para enfrentar vários problemas diferentes. Finalmente, a seguir é o que eu coloquei algumas peças de diferentes mensagens em conjunto, que trabalharam para mim como esperado.
private void btnCompare_Click(object sender, EventArgs e)
{
ThreadStart threadStart = new ThreadStart(Execution);
Thread thread = new Thread(threadStart);
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
Aqui está o método de execução que também carrega invocando o controle PictureBox:
private void Execution()
{
btnCompare.Invoke((MethodInvoker)delegate { pictureBox1.Visible = true; });
Application.DoEvents();
// Your main code comes here . . .
btnCompare.Invoke((MethodInvoker)delegate { pictureBox1.Visible = false; });
}
Tenha em mente, o PictureBox é invisível a partir de janela de propriedades ou fazer a seguir:
private void ComparerForm_Load(object sender, EventArgs e)
{
pictureBox1.Visible = false;
}