2011-12-14 27 views
16

Tengo una aplicación que importa datos de Excel. Sin embargo, cuando ejecuto la aplicación winforms e intrigo la aplicación, usando System.Windows.Forms.Application.Exit(); todavía puedo ver el "MyAppName" .vshost32.exe ejecutándose en el administrador de tareas.Salir de una aplicación C# winforms

Cuando salgo de la aplicación en modo de depuración, el formulario se cierra, pero el VS IDE no se "detiene".

¿Cómo me aseguro de que la aplicación finalice correctamente?

+0

pregunta similar a http://stackoverflow.com/questions/4314436/i-cant-kill-myapp-vshost-exe – dash

Respuesta

21

Su llamada a Application.Exit() está funcionando bien. El ejecutable MyAppName.vshost32.exe es un host con fines de depuración. Se ejecuta mientras tiene un proyecto abierto en Visual Studio, independientemente de si hay una sesión de depuración activa.

Actualización: Ok, he entendido mal. Lo anterior es cierto, pero probablemente estés teniendo problemas con los hilos colgados en el fondo. Debe terminar sus hilos para que se cierre correctamente. La respuesta de Asher cubre esto. Si sólo está tratando de hacer una matanza rápida y sucia super hacky, puede utilizar el siguiente (aunque no se responsabilizan de los efectos secundarios, ya que es muy hacky):

System.Diagnostics.Process.GetCurrentProcess().Kill();

+1

Estoy de acuerdo, en general, , excepto que en este escenario específico, la sesión del depurador de VS aún está en marcha, lo que indica que la aplicación aún se está ejecutando (al menos, así es como interpreté la pregunta) – Cameron

+0

@Cameron: Ah, no entendí bien. Voy a actualizar. – Polynomial

+0

Buena captura @Cameron – Troy

6

Tener ¿Has probado la función más brutal Environment.Exit()?

Application.Exit() acaba de enviar un mensaje diciendo que se apague; si el mensaje nunca se procesa (por el motivo que sea), la aplicación seguirá ejecutándose indefinidamente.

Desde el MSDN documentation of Application.Exit():

El método Salir Detiene todos corriendo bucles de mensajes en todas las roscas y cierra todas las ventanas de la aplicación. Este método no obliga necesariamente a la aplicación a salir. El método Exit generalmente se llama desde un bucle de mensaje y fuerza a Run a regresar.

+0

Bueno, la forma se cierra, y cuando hago un punto de interrupción, hago clic en esa línea y se ejecuta correctamente. Entonces esa línea se ejecuta. – Troy

+0

@Troy: Correcto, pero al llamar a 'Application.Exit()' solo se envía un mensaje a la cola de todas las bombas de mensajes; la bomba de su formulario parece procesar el mensaje y salir, pero hay algo más (¿otro hilo, quizás?) que no está atendiendo la solicitud – Cameron

4

Tuve un problema similar causado por una herramienta de terceros que no me permitió establecer los hilos como fondo. Polinomio tenía la idea correcta, pero la sintaxis es la siguiente:

System.Diagnostics.Process.GetCurrentProcess().Kill(); 
Cuestiones relacionadas