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?

Foi útil?

Solução

Não é muito difícil.

  1. Solte um picturebox para seu formulário.
  2. Adicione o arquivo .gif como a imagem na picturebox
  3. 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;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top