slow? try BackgroundWorker Component

Entre tantas y nuevas características y posibilidades que tenemos con Visual Studio 2005, una de las que mas me ha llamado la atención es la del BackgroundWorker Component un nuevo componente que tenemos disponible para el desarrollo de clientes inteligentes con Windows Forms 2.0. Este componente nos permite correr sub. procesos o tareas en un proceso separado al de nuestra aplicación, preemitiéndonos ejecutar dos tareas simultáneamente. Un ejemplo sencillo es el cargar un servicio Web, por ejemplo, el cargar un servicio Web en ocasiones al principio puede ser una tarea un poco pesada de ejecutar haciendo que durante el proceso de ejecución nuestra aplicación Windows Forms se congele en espera del resultado. Con este componente podemos mandar que el servicio Web se ejecute en una segunda tarea o por detrás haciendo que nuestra aplicación Windows no se congele y permita realizar otras tareas mientras que por detrás se carga el servicio Web. Antes hacer realidad este tipo de funcionalidad era complejo, teníamos que crear delegates encargados de asociar los eventos de inicio y fin de ejecución del proceso, un poco complejo de escribir, pero hoy, de entrada es tan sencillo que creo que vale la pena escribir de ello


El componente BackgroundWorker cuenta con tan solo tres eventos:



  • DoWork
    En este evento podemos escribir el codigo de la tarea que deseamos realizar en un segundo plano.
  • ProgressChanged
    Este es un evento que podemos utilizar para asociar un control ProgessChange y mostrar el porcentaje de avance en un control.
  • RunWorkerCompleted
    Este evento se dispara cuando se termino de realizar la funcionalidad en segundo plano

Mira el siguiente codigo es verdaderamente sencillo, lo que hacemos es invocar un web service en segundo plano:

 1:    private void Form1_Load(object sender, EventArgs e)
2: {
3: this.backgroundWorker1.RunWorkerAsync();
4: }
5:
6: private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
7: { localhost.TramitesWS ws = new LAB01WIN.localhost.TramitesWS();
8: e.Result = ws.CargarTramite();
9: }
10:
11: private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
12: {
13: DataSet ds = (DataSet)e.Result;
14:
15: this.dataGridView1.DataMember = ds.Tables[0].TableName;
16: this.dataGridView1.DataSource = ds;
17: }

 


Verdaderamente facil, pruebalo y veraz.

4 thoughts on “slow? try BackgroundWorker Component

  1. Para usar un progressbar es sencillo:
    pegar tu control progressBar y luego llamas al metodo del worker:
    this.backgroundWorker1.ReportProgress(35);
    indicando el procentaje de avance del 1 al 100, este metodo lo puedes llamar desde dentro del evento DoWork e ir incrementando el avance llamando al metodo pero con procentajes mas altos hast allegar a 100.
    Y en en evento ProgressChanged agregas el sigueinte codigo:
    private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
    progressBar1.Value = e.ProgressPercentage;
    }

    Saludos desde tingo maria!!!
    rkarl_x86 [a] hotmail.com

  2. Y que hacer cuando sencillamente todo es lento? Acabo de migrar nuestra aplicación del framework 1.1 al 2, y tarda en hacer lo mismo (por lo que voy viendo) 1/3 más…
    Qué opinais?

Leave a Reply

Your email address will not be published. Required fields are marked *