Tengo un formulario que muestra mensajes de progreso a medida que se ejecuta un proceso bastante largo. Es una llamada a un servicio web, por lo que realmente no puedo mostrar un porcentaje completo en una barra de progreso de manera significativa. (No me gusta especialmente la propiedad Marquee de la barra de progreso)
Me gustaría mostrar un GIF animado para darle al proceso la sensación de cierta actividad (por ejemplo, archivos que vuelan de una computadora a otra como el proceso de copia de Windows).
¿Cómo haces esto?
c#
winforms
animated-gif
Stuart Helwig
fuente
fuente
Respuestas:
No es muy dificil.
Cosas a tener en cuenta:
Gifs animados:
Si buscas gifs animados, puedes generarlos:
AjaxLoad - Ajax Loading gif generator
Otra forma de hacerlo:
Otra forma que he encontrado que funciona bastante bien es el control de diálogo asíncrono que encontré en el proyecto de código
fuente
Application.DoEvents();
. Enfoque posible: la lógica de su negocio dispara un evento cuando algo se hace parcialmente, luego cualquier propiedad (por ejemplo, barra de progreso o porcentaje) se puede actualizar y la animación se puede actualizar con Application.DoEvents ()Yo tuve el mismo problema. La forma completa (incluido el gif) se detiene para volver a dibujarse debido a una operación prolongada que funciona en segundo plano. Así es como resolví esto.
Simplemente creé otro hilo para ser responsable de esta operación. Gracias a este formulario inicial continúa dibujándose sin problemas (incluido mi trabajo GIF). ShowProgressGifDelegate y HideProgressGifDelegate son delegados en forma que establecen la propiedad visible de pictureBox con gif en true / false.
fuente
Tenga en cuenta que en Windows, tradicionalmente no utiliza Gif animados, sino pequeñas animaciones AVI: hay un control nativo de Windows solo para mostrarlos. Incluso hay herramientas para convertir GIF animados a AVI (y viceversa).
fuente
System.Windows.Forms.PictureBox
control, solo usaré GIF animados.Si lo pones en un control PictureBox, debería funcionar
fuente
No lo hace cuando comienzas una operación larga, porque todo se detiene ya que estás en el mismo hilo.
fuente
fuente
Tuve el mismo problema y encontré diferentes soluciones mediante la implementación que solía enfrentar varios problemas diferentes. Finalmente, a continuación se muestran algunas piezas de diferentes publicaciones que funcionaron para mí como se esperaba.
Aquí está el método de ejecución que también lleva a invocar el control PictureBox:
Tenga en cuenta que PictureBox es invisible desde la ventana Propiedades o haga lo siguiente:
fuente