Eu tenho um formulário mostrando mensagens de progresso à medida que um processo bastante longo é executado. É uma chamada para um serviço da Web, por isso não posso realmente mostrar um valor percentual completo em uma barra de progresso significativamente. (Não gosto particularmente da propriedade Marquee da barra de progresso)
Gostaria de mostrar um GIF animado para dar ao processo a sensação de alguma atividade (por exemplo, arquivos que voam de um computador para outro, como o processo de cópia do Windows).
Como você faz isso?
c#
winforms
animated-gif
Stuart Helwig
fonte
fonte
Respostas:
Não é muito difícil.
O que levar em consideração:
Gifs animados:
Se você estiver procurando por gifs animados, pode gerá-los:
AjaxLoad - Ajax Loading gif generator
Outra maneira de fazer isso:
Outra maneira que eu descobri que funciona muito bem é o controle de diálogo assíncrono que encontrei no projeto de código
fonte
Application.DoEvents();
. Abordagem possível: sua lógica de negócios dispara um evento quando algo é parcialmente concluído; quaisquer propriedades (por exemplo, barra de progresso ou porcentagem) podem ser atualizadas e a animação pode ser atualizada com Application.DoEvents ()Eu tive o mesmo problema. Forma inteira (incluindo gif) parando para se redesenhar por causa de uma operação longa trabalhando em segundo plano. Aqui está como eu resolvi isso.
Eu simplesmente criei outro thread para ser responsável por esta operação. Graças a este formulário inicial, continua o redesenho sem problemas (incluindo o meu gif funcionando). ShowProgressGifDelegate e HideProgressGifDelegate são delegados no formulário que definem a propriedade visível de pictureBox with gif como true / false.
fonte
Observe que, no Windows, você tradicionalmente não usa Gifs animados, mas poucas animações AVI: existe um controle nativo do Windows apenas para exibi-los. Existem ainda ferramentas para converter gifs animados em AVI (e vice-versa).
fonte
System.Windows.Forms.PictureBox
controle, usarei apenas GIFs animados.Se você colocá-lo em um controle PictureBox, ele deve funcionar
fonte
Não acontece quando você inicia uma longa operação para trás, porque tudo para desde que você está no mesmo segmento.
fonte
fonte
Eu tive o mesmo problema e me deparei com diferentes soluções implementando as quais eu costumava enfrentar vários problemas diferentes. Finalmente, abaixo está o que eu coloquei algumas peças de diferentes posts, que funcionaram para mim como esperado.
Aqui está o método Execution que também carrega a chamada do controle PictureBox:
Lembre-se de que o PictureBox é invisível na janela Propriedades ou abaixo:
fonte