2010-04-22 13 views
41

El siguiente código no sale de la aplicación. ¿Cómo puedo salir de la aplicación y asegurarme de que todos los subprocesos en ejecución estén cerrados?¿Cómo salir de todos los subprocesos en ejecución?

foreach (Form form in Application.OpenForms) 
{ 
    form.Close(); 
} 
Application.Exit(); 
+0

@monkey_boys lugar en el que se utiliza en las discusiones ¿tu codigo? – Kiril

Respuesta

69

Usted no se presenta el uso de todos los hilos en su código, pero supongamos que sí tienen roscas en el mismo. Para cerrar todos los hilos se debe configurar todos ellos a subprocesos de fondo antes de empezar a ellos, entonces se cerrarán automáticamente cuando se cierra la aplicación, por ejemplo:

Thread myThread = new Thread(...); 
myThread.IsBackground = true; // <-- Set your thread to background 
myThread.Start(...); 

A "COMO: Detener Múltiples Hilos" artículo de Microsoft : http://msdn.microsoft.com/en-us/library/aa457093.aspx

45

puedes probar el siguiente código:

Environment.Exit(Environment.ExitCode); 
13

Esto debería funcionar para todos los hilos que se han abierto.

protected override void OnExiting(Object sender, EventArgs args) 
{ 
    base.OnExiting(sender, args); 
    Environment.Exit(Environment.ExitCode); 
} 
7

Fui a través de un problema similar en mi software, pero por desgracia sólo hacer las roscas para funcionar en segundo plano no resolvió el problema. De hecho, mientras que el hilo trae de vuelta los datos (el software principal es impulsado por los datos) y si cierro la aplicación, resulta en un error de Windows, dando lugar a un mensaje de depuración.

Así que lo que realmente trabajó para mí:

Paso 1: hizo todos los hilos se ejecutan en segundo plano, como

Thread aThread = new Thread(MethodName); 
aThread.IsBackground = true; //<-- Set the thread to work in background 
aThread.Start(); 

Paso 2: En la acción de cierre de la forma llamada/aplicación el método Environment.Exit, como

Environment.Exit(Environment.ExitCode); 

Esto mantiene la memoria administrada pe de manera perfecta, sin pérdida de memoria.

Espero que esto ayude.

1

Esto hizo el trabajo para mí:

En lugar de utilizar:

Application.Exit() 

que deja a otros hilos abierto, trate de usar:

Environment.Exit(Environment.ExitCode); 
+0

Lo siento, no quise duplicar. La respuesta de Somdip Dey lo hizo funcionar para mí. – Jimmy

Cuestiones relacionadas