visual - ¿Cómo se muestran los GIF animados en Windows Form(c#)?
gif winform c# (6)
No es muy difícil.
- Coloca un recuadro en tu formulario.
- Agregue el archivo .gif como la imagen en la caja de imágenes
- Muestre el cuadro de imagen cuando esté cargando.
Cosas a tener en cuenta:
- Al deshabilitar el cuadro de imagen se evitará que el gif sea animado.
Gifs animados:
Si buscas gifs animados, puedes generarlos here
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
Tengo un formulario que muestra los mensajes de progreso ya que se ejecuta un proceso bastante largo. Es una llamada a un servicio web, por lo que realmente no puedo mostrar un porcentaje de figura completa en una barra de progreso de manera significativa. (No me gusta particularmente la propiedad Marquee de la barra de progreso)
Me gustaría mostrar un GIF animado para darle al proceso la sensación de alguna actividad (por ejemplo, archivos que vuelan de una computadora a otra como el proceso de copia de Windows).
¿Cómo haces esto?
No ocurre cuando se inicia una operación larga atrás, porque todo se detiene ya que está en el mismo hilo.
Si lo pones en un control PictureBox, debería funcionar
Tenga en cuenta que en Windows, tradicionalmente no usa 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).
Tuve el mismo problema y encontré diferentes soluciones mediante la implementación, que usé para enfrentar varios problemas diferentes. Finalmente, a continuación se muestra lo que puse algunas piezas de diferentes publicaciones juntas que funcionaron para mí como se esperaba.
private void btnCompare_Click(object sender, EventArgs e)
{
ThreadStart threadStart = new ThreadStart(Execution);
Thread thread = new Thread(threadStart);
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
Aquí está el método de ejecución que también lleva invocando el control 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; });
}
Tenga en cuenta que la PictureBox es invisible desde la ventana de Propiedades o debajo:
private void ComparerForm_Load(object sender, EventArgs e)
{
pictureBox1.Visible = false;
}
Yo tuve el mismo problema. Toda la forma (incluido el gif) que se detiene para volverse a dibujar debido a la operación prolongada que se realiza en segundo plano. Así es como he resuelto esto.
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();
}
Simplemente creé otro hilo para ser responsable de esta operación. Gracias a esta forma inicial continúa rediseñando sin problemas (incluido mi gif trabajando). ShowProgressGifDelegate y HideProgressGifDelegate son delegados en el formulario que establece la propiedad visible de pictureBox con gif en verdadero / falso.