2010-01-19 18 views
5

Tengo una aplicación simple cuando necesito detener un hilo de fondo utilizando la función Stop() antes de cerrar la aplicación. El problema es que mi función principal() tiene varios puntos de salida (sentencias de retorno)AppDomain.CurrentDomain.ProcessExit and cleanup

static void Main(string[] args) 
{ 
/// some code 
return; 

// some code 
return; 

//// etc 
} 

He intentado utilizar AppDomain.CurrentDomain.ProcessExit como un lugar signle para la limpieza pero nunca se llama (al menos mientras no es un hilo de fondo). ¿Hay alguna manera de resolver alguna buena manera de implementar eso?

+1

¿Por qué no se refactorizar la función principal de tener un solo punto de salida? – Restuta

+1

¿Está preguntando cómo puede optimizar para tener un único punto de salida, o desea ser capaz de matar su proceso y todos sus hilos de fondo en un momento dado? – Abel

+1

Nunca se llama porque su hilo todavía se está ejecutando, manteniendo el proceso vivo. Eso fue cubierto en su pregunta anterior. –

Respuesta

4

Usted puede envolver todo lo que el código en un método separado y llamarlo desde main():

static void Main(string[] args) 
{ 
    DoSomething(); 
    TerminateThread(); // Thread.Stop() code goes here 
} 

static void DoSomething() 
{ 
    /// some code 
    return; 

    // some code 
    return; 

    //// etc 
} 
+1

Huh .. solución simple y genial, de acuerdo .. –

2

Cambie las llamadas return; y llame a una rutina de limpieza que también finalizó el proceso.

2

Puede utilizar Application.ApplicationExit Event

De acuerdo con el evento de MSDN:

produce cuando la aplicación está a punto de cerrar.

+4

Solo si su aplicación es una aplicación de formulario de ventana. Para una aplicación de consola, esto no funcionará. – affan