Pregunta

Tengo una función que simplemente llena una barra de progreso.

private void FillProgressBar(ProgressBar bar, Color c, int percent)
{
    int steps = 10;
    bar.set_Value(0);
    for (int i = 0; i < percent / steps; i++)
    {
        System.Threading.Thread.Sleep(100);
        bar.set_Value((i+1)*10) + bar.get_Value());
        this.Refresh();
    }
}

Lo convoco del hilo de la GUI (no múltiples hilos) y su propósito es llenar lentamente la barra.

Pero no parece estar haciéndolo, aunque el valor aumenta.

¿Alguna sugerencia sobre cómo actualizar un control específico o todo el formulario? PD: Como puede ver, esto.Refresh () tampoco funcionó.

¿Fue útil?

Solución

Intenta usar

Application.DoEvents();

Después de actualizar la barra de progreso.

más en DoEvents aquí

Otros consejos

Su código actual no permita que se ejecute el bucle principal del mensaje, por lo que bloqueará todos los mensajes, incluidos WM_PAINT unos...

No debes hacer eso, usar un hilo, usar un temporizador: no bloquees la interfaz de usuario.

Y no uses Application.DoEvents Es una mala práctica de programación y ni siquiera debería existe.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top