Ver Mensaje Individual
  #3 (permalink)  
Antiguo 12/12/2012, 09:05
Avatar de gedarufi
gedarufi
 
Fecha de Ingreso: diciembre-2008
Ubicación: Colombia
Mensajes: 540
Antigüedad: 15 años, 5 meses
Puntos: 22
Respuesta: Actualizar un progressbar en un formulario desde una clase

Hola, aqui te dejo un breve ejemplo para hacer lo que necesitas, esta dividido en 2 partes.
  1. Clase que realiza el proceso y "dispara" un evento para reportar un cambio
    Código C#:
    Ver original
    1. public class Clase{
    2.     //Resto de la clase
    3.     public event ProgressChangedEventHandler ReportProgress;
    4.  
    5.     protected void OnReportProgress(ProgressChangedEventArgs e){
    6.         if(ReportProgress != null){
    7.             ReportProgress(this, e);
    8.         }
    9.     }
    10.  
    11.     public void Procesar(){
    12.         for(int i = 0; i < 100; i++){
    13.             OnReportProgress(new ProgressChangedEventArgs(i, null));
    14.             Thread.Sleep(10);//Simula un retardo por el procesamiento de la información, se puede eliminar en la implementación definitiva
    15.         }
    16.     }
    17. }
  2. Implementación en el formulario del metodo que procesa el evento
    Código C#:
    Ver original
    1. //Dentro del Form del ProgressBar
    2. public class FormProgressBar : Form{
    3.     public FormProgressBar(){
    4.         //Resto del constructor
    5.  
    6.  
    7.         Clase cls = new Clase();
    8.  
    9.         cls.ReportProgress += new ProgressChangedEventHandler(cls_ProgressChanged);//Se agrega el manejador del evento
    10.         cls.Procesar();//Se inicia el proceso
    11.     }
    12.  
    13.     //Resto de la clase
    14.  
    15.     private void cls_ProgressChanged(object sender, ProgressChangedEventArgs e)
    16.     {
    17.         this.progressBar.Value = e.ProgressPercentage;//Este valor va de 0 a 100
    18.     }
    19. }

Tal vez tengas que agregar algún using pero en principio no deberías de tener problemas, otra cosa es que yo instancio la clase en el constructor, pero tu puedes hacerlo donde mejor te convenga, espero que esto te sea util.


Saludos