Cómo evitar que se bloquee una pantalla mientras carga datos en WindowsForm con Hilos

Como es habitual, en muchas ocasiones nuestros formularios tipo WindowsForm cargan una gran cantidad de información que luego es presentada en el mismo.

Para evitar que el usuario tenga la sensación de que no ha sido atendida su solicitud (eventos mediante pulsación de controles como botones, enlaces, etc.), vamos a realizar la carga de datos en segundo plano y mostraremos mientras el icono de espera (el que tenga por defecto el usuario configurado).

Para ello, vamos a ver el siguiente ejemplo, donde en el evento Load del formulario abriremos un hilo que hará la carga. El formulario va a contar con un control de tipo Panel llamado panelPrincipal que va a contener todos los controles. Mientras dure la carga, la propiedad .Enabled del panelPrincipal estará a false, para evitar que el usuario pueda accionar algún control.

private void frmEjemplo_Load(object sender, EventArgs e)
{
    Thread hilo = new Thread(new ThreadStart(this.CargarDatosHilo));
    hilo.Start();
}

private void CargarDatosHilo()
{
    UseWaitCursor = true;
    panelPrincipal.Enabled = false;

    this.CargarDatos();

    UseWaitCursor = false;
    this.Cursor = Cursors.Default;
    panelPrincipal.Enabled = true;
    this.Refresh();
}

private void CargarDatos()
{
    //Método que hace toda la carga de datos
}

Más información

Quizá te interese...
Deja un comentario...
Suscribirme
Notificación de
guest
1 Comentario
Comentarios en línea
Ver todos los comentarios
Erwin
Erwin
2 años hace

Muy buena explicación, estaba que rompía la cabeza, con Async y Await