2011-06-01 10 views
8

Supuse que Application.Exit causa que la aplicación salga inmediatamente, pero puedo ver que de acuerdo con el ejemplo a continuación, saldrá después de que termine el ciclo. ¿También cuando este comando forzará a la aplicación a salir?¿App.Exit no sale inmediatamente?

for (int I = 0; I < 1000; I++) 
{ 
    if (I == 1) 
     Application.Exit(); 
} 

Respuesta

6

Application.Exit() hará que el aplicación para salir una vez que vuelve a la bomba de mensajes subyacente. Si está ejecutando el código en el hilo de interfaz de usuario, esto no será hasta que regrese de cualquier método de interfaz de usuario que está en

9

Como se puede ver here, este método "Informa a todas las bombas mensaje de que deben terminar" y "Este método no forzar la aplicación para salir."

2

De MSDN (como un controlador de clic de botón.):

Informa todas las bombas de mensajes que deben terminar, y luego cierra todas las ventanas de aplicaciones después de que los mensajes hayan sido procesados.

-

Este método no tiene por qué forzar la aplicación para salir. El método Exit generalmente se llama desde un bucle de mensaje y fuerza a Run a regresar. Para salir de un bucle de mensaje solo para el hilo actual, llame a ExitThread.

1

Comprobar MSDN

El método de salida se detiene bucles de todos los mensajes que se ejecuta en todas las discusiones 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. Para salir de un bucle de mensaje solo para el hilo actual, llame a ExitThread.

3

¿La pregunta "cómo puedo salir ahora?" Si es así, vaya con Environment.FailFast: es la salida más rápida y, como bonificación adicional, puede dejar una entrada en el registro de eventos. Como se dice en MSDN,

Este método termina un proceso sin correr ningún intento activo/finally bloques o finalizadores.

El método FailFast escribe la cadena del mensaje en el registro de sucesos de aplicación de Windows , crea un volcado de la aplicación , y luego se termina el proceso actual . La cadena del mensaje es también incluida en el informe de errores a Microsoft.

utilizar el método de FailFast en lugar del método Salir para finalizar su aplicación si el estado de su solicitud está dañado sin posibilidad de reparación, y ejecutar try/finally bloques y finalizadores voluntad recursos de programas corruptos de su aplicación.

+0

Tenga en cuenta que FailFast es esencialmente equivalente a forzar el proceso para que se cierre desde el Administrador de tareas y provocará que se muestre un clásico y feo mensaje de error de Windows.Solo debe usarse bajo circunstancias extremas (como un interbloqueo de subprocesos de IU). –

+0

@Dan - estoy de acuerdo, esta es una buena técnica para tirar las manos en el aire y rescatar, que no se ejecuta cuando alguien hace clic en el botón Salir. También es ideal para probar tu WER o código de reinicio/recuperación. –

Cuestiones relacionadas