2011-09-10 16 views
5

¿Hay alguna forma de terminar de manera limpia un ciclo de mensajes emitido llamando a System.Windows.Forms.Application.Run() desde otra secuencia?C# - Aplicación de terminación terminada()

Thread messageLoop = new Thread(() => Application.Run()); 
messageLoop.SetApartmentState(ApartmentState.STA); 
messageLoop.Start(); 
//How to terminate thread like on Application.ExitThread() without calling Thread.Abort()? 

¡Gracias de antemano!

Respuesta

11

Utilice la clase ApplicationContext para mantener una referencia al hilo. De esta manera:

ApplicationContext threadContext; 

    private void startLoop() { 
     threadContext = new ApplicationContext(); 
     var messageLoop = new Thread(() => Application.Run(threadContext)); 
     messageLoop.Start(); 
    } 

    private void stopLoop() { 
     threadContext.ExitThread(); 
     threadContext = null; 
    } 
+1

beat ya by 1 second! ;-) –

+1

Hehe, probar el código de ejemplo tomó más de un segundo. –

+1

Humph, prueba schmesting! –

Cuestiones relacionadas