20 mar 2012

[WinForm] – Cuadros de Diálogos con BackGroundWorker y Delegados

 

Buen día a todos!! En esta oportunidad se mostrará el uso del BackGroundWorker y Delegados. Su uso es muy importante, debido a que informa al usuario que un proceso se está ejecutando, mostrando ya sea una barra de progreso o imagen gif, eso ya depende del usuario, para este caso colocaremos los 2. Esto informa al usuario que el sistema se está ejecutando y no que se “colgó”. Como sabemos tenemos que ser muy descriptivos con el usuario. Esto principalmente se implementa en carga de datos masiva.

Ahora pasemos a la parte buena, creamos un form como en la siguiente imagen :

Luego crearemos nuestro cuadro de dialogo, para ello crean un form similar a este :

Para la imagen gif pueden descargarla de aquí :Cargando1.gif

Ahora el código del Formulario que solicita los datos para llenar la grilla :

PDT: En la propiedad del ProgressBar colocar en Marquee mediante la vista Diseño.

   1: using System;
   2: using System.Collections.Generic;
   3: using System.ComponentModel;
   4: using System.Data;
   5: using System.Drawing;
   6: using System.Linq;
   7: using System.Text;
   8: using System.Windows.Forms;
   9:  
  10: namespace WindowsFormsApplication1
  11: {
  12:     public partial class Form3 : Form
  13:     {
  14:         public Form3()
  15:         {
  16:             InitializeComponent();
  17:         }
  18:  
  19:         //Creamos un dataset
  20:         DataSet ds = new DataSet();
  21:  
  22:         public void rssBlog()
  23:         { 
  24:             //Leeremos el ultimo rss del blog
  25:                 ds.ReadXml("http://feeds.feedburner.com/ProgramacinConEjemplosnet?format=xml", XmlReadMode.Auto);
  26:         }
  27:  
  28:         private void btnCargarDatos_Click(object sender, EventArgs e)
  29:         {
  30:             //Creamos la instancia del dialogo y pasamos el trabajo
  31:             frmDialog mensaje = new frmDialog(rssBlog);
  32:             //Si el trabajo termina OK entonces...
  33:             if (mensaje.ShowDialog(this) == DialogResult.OK)
  34:             {
  35:                 //Pasamos el resultado obtenido a la grilla
  36:                 dataGridView1.DataSource = ds.Tables[0];
  37:             }
  38:         }
  39:     }
  40: }

Luego el código del Formulario Diálogo que ejecuta el trabajo  :



   1: using System;
   2: using System.Collections.Generic;
   3: using System.ComponentModel;
   4: using System.Data;
   5: using System.Drawing;
   6: using System.Linq;
   7: using System.Text;
   8: using System.Windows.Forms;
   9:  
  10: namespace WindowsFormsApplication1
  11: {
  12:     public partial class frmDialog : Form
  13:     {
  14:  
  15:         //Declaracion del delegado(declara la firma y el nombre
  16:         //que se le asignará
  17:         public delegate void trabajo();
  18:  
  19:         //Delegado que usaremos para realizar finalmente el trabajo
  20:         //entregado por parametro al constructor
  21:         public trabajo Delegado { get; set; }
  22:  
  23:         
  24:         public frmDialog(trabajo delegado)
  25:         {
  26:             InitializeComponent();
  27:             //Recibimos el trabajo
  28:             this.Delegado = delegado;
  29:         }
  30:  
  31:         private BackgroundWorker nuevoTrabajo(trabajo delegado)
  32:         {
  33:             //Creo el trabajador
  34:             var trabajador = new BackgroundWorker();
  35:  
  36:             //Hacer el trabajo...
  37:             trabajador.DoWork += delegate {delegado(); };
  38:  
  39:             //Si el trabajo se completa entonces...
  40:             trabajador.RunWorkerCompleted += delegate {DialogResult = DialogResult.OK; Close(); };
  41:  
  42:             return trabajador;
  43:  
  44:         }
  45:  
  46:         private void Form2_Load(object sender, EventArgs e)
  47:         {
  48:             //Recibimos el trabajo y ejecutamos
  49:             nuevoTrabajo(Delegado).RunWorkerAsync();
  50:         }
  51:     }
  52: }

Cabe recordar que si quieren mandar un dato al formulario Dialogo no lo hagan mediante un control, sino mediante un tipo de dato(string,int32,Double,etc…) ya que sino les saldrá error debido a que se está ejecutando en otro hilo.


Ahora solo queda ejecutar el código y probar! Hasta una nueva oportunidad. Saludos!:arriba:.

1 comentario:

  1. Hola John Barboza
    Ya cree los formularios respectivos y sus controles con los nombres especificados.
    Estoy intentando correr la aplicación, pero no me muestra nada en el datagridview..Ayuda , gracias

    ResponderEliminar