none
Backgroundworker lanzar un evento en dowork usando delegado RRS feed

  • Pregunta

  •  hola grupo

    Queria que me puedan recomendar algo con lo siguiente:

    Estoy haciendo una aplicacion Winform monitor. 
    (en este hilo  http://social.msdn.microsoft.com/Forums/es-AR/netfxwebes/thread/155b4148-af30-47b6-a990-4cf1fd4d7b0d)
    Estoy usando el control BackgroundWorker para menejo de thread. El tema es que dentro del metodo dowork,(donde esta el metodo que realiza toda la logica. realizarmonitoreo)lanzo un evento que lo captura un metodo que lo que hace es setear un satusbar de la interfaz para actualizar la ultima vez que se corrio el  proceso .

    El error que me sale es cdo corro en modo debug (si corro en modo no debug no me corta y funciona bien) dandome el siguiente error
    Operación no válida a través de subprocesos: Se tuvo acceso al control 'statusStrip1' desde un subproceso distinto
    a aquel en que lo creó.

    tambien podria usar  dentro del metodo Dowork  bgw.ReportProgress(1, "  Corrida " + DateTime.Now); pero es un poco mas lento
    para informar a la ui.

      El codigo es el siguiente:

     private void bgw_DoWork(object sender, DoWorkEventArgs e)
            {
                 BackgroundWorker bgw = sender as BackgroundWorker;
                 while (!bgw.CancellationPending)
                 {
    
                    // bgw.ReportProgress(1, "  Corrida " + DateTime.Now);
                      notificar("empieza corrida: " + DateTime.Now );
                     RealizarMonitoreo();
                     notificar("Ultima Actualizacion " + DateTime.Now);
                  
                    // System.Threading.Thread.Sleep(Intervalo);
                    
                     
                 }
            }
    
    
      private void ActualizarBarraEstado(string texto)
            {
    
                this.statusStrip1.Items[0].Text = texto;
            
            }
    
     private void Form1_Load(object sender, EventArgs e)
            {
    
                this.notificar += new notificacion(ActualizarBarraEstado);
    el evento es este .public event notificacion notificar;


     

     Cualquier tipo de ayuda sera bienvenida

    Desde ya gracias como siempre.

    lunes, 20 de febrero de 2012 22:38

Respuestas

  • pregunta si la aplciacion es winforms, porque la panteas en el for de asp.net ? tieen esta aplicacion relacion alguna con un desarrollo web, o solo te has equivocado y quieres que movamos la pregunta al foro correcto

    dandome el siguiente error
    Operación no válida a través de subprocesos: Se tuvo acceso al control 'statusStrip1' desde un subproceso distinto
    a aquel en que lo creó.

    creo que ya sabes la respuesta,  debes usar el ReportProgress para informacion a el formulario, el evento DoWork no esta permtirido porque justamente es el que se ejecuta en un thread separado

    la explicacion que das es la forma correcta de hacerlo

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta sebastian viga lunes, 20 de febrero de 2012 23:30
    lunes, 20 de febrero de 2012 23:07

Todas las respuestas

  • pregunta si la aplciacion es winforms, porque la panteas en el for de asp.net ? tieen esta aplicacion relacion alguna con un desarrollo web, o solo te has equivocado y quieres que movamos la pregunta al foro correcto

    dandome el siguiente error
    Operación no válida a través de subprocesos: Se tuvo acceso al control 'statusStrip1' desde un subproceso distinto
    a aquel en que lo creó.

    creo que ya sabes la respuesta,  debes usar el ReportProgress para informacion a el formulario, el evento DoWork no esta permtirido porque justamente es el que se ejecuta en un thread separado

    la explicacion que das es la forma correcta de hacerlo

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta sebastian viga lunes, 20 de febrero de 2012 23:30
    lunes, 20 de febrero de 2012 23:07
  • ok,  leandro , si deberia estar en el foro de winform me equivoque , si en realidad  queria saber si se podia hacer con delegados porque lei este articulo ,

    http://dotneat.wordpress.com/2010/03/06/ejemplo-backgroundworker-en-csharp/

    lo hago con reporprogress y por cualquier eventualidad posteo en el de winform.

    Gracias.

    lunes, 20 de febrero de 2012 23:20