2009-06-03 16 views
5

Hola Estoy desarrollando una aplicación .Net y quiero lograr lo siguiente:ventanas de llamar a un formulario desde otro hilo (.Net)

Tengo una aplicación Windows Forms, y un temporizador (System.Timers.Timer) que ejecuta un hilo basado en un cronograma. El problema es que no puedo acceder a la IU (formulario de Windows) desde el hilo secundario (WorkerThread), el error indica que no se puede acceder al componente desde un hilo que no lo creó.

¿Hay alguna manera de lograr esto?

Gracias!

Respuesta

10
formObject.Invoke(delegate { 
     // action to perform on UI thread 
}); 
+2

Y tenga en cuenta que este trabajo básicamente se agrega a una cola de trabajo para el subproceso de la interfaz de usuario que finalmente lo ejecutará cuando tenga tiempo. –

2

Digamos que su método de obrero (que se ejecuta en un hilo) es

DoWork(args) 
{ 
    ... 
    UpdateUI(); 
} 

El método que controla evento transcurrido del temporizador debe hacer esto:

OnTimerElapsed(object sender, ElapsedEventArgs e) 
{ 
    args = GetArgs(); 
    this.BeginInvoke(() => DoWork(args)); 
    // 'this' refers to form here. 
    // You can also use BeginInvoke on a user control for updating it. 
} 

Esto ejecutará DoWork en un hilo separado y DoWork tendrá la capacidad de actualizar la IU.

Cuestiones relacionadas