Tengo una barra de progreso en mi ventana que me gustaría avanzar durante la función Form1_Load ()

Es decir, al principio de esta está en 0 y a medida que llegamos al final de esta función me gustaría saber qué progreso se está haciendo.

Intenté esto, pero la barra de progreso no cambia el valor de mi barra de progreso de acuerdo con el código, sino solo al final.

    private void Window_Shown(object sender, EventArgs e)
    {
        ///
        /// CHARGEMENT DE TOUTE LES MOTS 
        ///
        progressBarLoad.Value = 0;

        //Code...

        progressBarLoad.Value = 100; //end of the code

    }

¿Es eso posible?

Gracias.

0
Rayane Staszewski 29 oct. 2019 a las 20:49

1 respuesta

La mejor respuesta

El evento del formulario Load ocurre antes de Shown, por lo que el usuario no verá nada ...

Puede poner el código en el evento Shown.

O puede poner la barra en una forma de presentación que crea y muestra en la carga.

Para inicializar la barra, use la propiedad Step para definir el incremento y Maximum para definir el número de pasos.

Luego use PerformStep() entre los pasos con Refresh.

Ejemplo en el evento Shown:

progressBarLoad.Value = 0;
progressBarLoad.Maximum = 5;
progressBarLoad.Step = 1;
progressBarLoad.Refresh();
Init1();
progressBarLoad.PerformStep();
progressBarLoad.Refresh();
Init2();
progressBarLoad.PerformStep();
progressBarLoad.Refresh();
Init3();
progressBarLoad.PerformStep();
progressBarLoad.Refresh();
Init4();
progressBarLoad.PerformStep();
progressBarLoad.Refresh();
Init5();
progressBarLoad.PerformStep();
progressBarLoad.Refresh();

Usando un formulario de presentación, cree, por ejemplo, un cuadro FixedSingle con ShowInTaskBar falso y FormBorderStyle falso y StartPosition pantalla central. Ponga una barra con Modifiers como interna o pública. Entonces puedes controlarlo desde el evento Load:

var splash = new SplashForm();
splash.progressBarLoad.Value = 0;
splash.progressBarLoad.Maximum = 5;
splash.progressBarLoad.Step = 1;
splash.Show();
Init1();
splash.progressBarLoad.PerformStep();
splash.progressBarLoad.Refresh();
Init2();
splash.progressBarLoad.PerformStep();
splash.progressBarLoad.Refresh();
Init3();
splash.progressBarLoad.PerformStep();
splash.progressBarLoad.Refresh();
Init4();
splash.progressBarLoad.PerformStep();
splash.progressBarLoad.Refresh();
Init5();
splash.progressBarLoad.PerformStep();
splash.progressBarLoad.Refresh();
splash.Close();

Puedes refactorizar eso usando un método DoProgress:

void DoProgress()
{
  splash.progressBarLoad.PerformStep();
  splash.progressBarLoad.Refresh();
}

Por lo tanto, también puede poner este método en SplashForm (eliminar splash.) y agregar un InitProgress:

public void InitProgress(int stepCount, int stepIncrement)
{
  progressBarLoad.Value = 0;
  progressBarLoad.Maximum = stepCount;
  progressBarLoad.Step = stepIncrement;
}

Por lo tanto, puede hacer esto ahora:

var splash = new SplashForm();
splash.InitProgress(5, 1);
splash.Show();
Init1();
splash.DoProgress();
Init2();
splash.DoProgress();
Init3();
splash.DoProgress();
Init4();
splash.DoProgress();
Init5();
splash.DoProgress();
splash.Close();
0
Olivier Rogier 29 oct. 2019 a las 18:13