2011-11-01 17 views
18

Tengo una aplicación C# multiproceso y tiene un bloqueo de escritor lector, pero da una excepción de tiempo de espera en algunas computadoras (no es posible adquirir un bloqueo a tiempo) y necesito cerrar forzosamente todos los hilos. ¿cómo lo hago sin obtener ninguna excepción adicional?¿Cómo forzar la aplicación de salida en C#?

+4

'Environment.FailFast (int)' matará su aplicación lo más rápido posible. – vcsjones

+0

Posible duplicado de http://stackoverflow.com/questions/1057151/application-exit – angularsen

Respuesta

12

Environment.FailFast puede ser lo que estás buscando, pero ten cuidado con los efectos secundarios: no se ejecutan finalizadores, finalmente bloques o cualquier otra cosa. Realmente termina el proceso AHORA.

+1

ok, lo usé y me dio esta excepción: El tiempo de ejecución ha encontrado un error fatal. La dirección del error estaba en 0x044f07bd, en el hilo 0xfb0. El código de error es 0x80131623. Este error puede ser un error en el CLR o en las partes inseguras o no verificables del código de usuario. Las fuentes comunes de este error incluyen errores de clasificación de usuarios para COM-interop o PInvoke, que pueden dañar la pila. – armin

+1

Vale la pena mencionar la opción de Environment.Exit. Ambos tienen la garantía de salir casi de inmediato, pero Exit no genera un evento de error de evento del sistema y ejecuta el finalizador try/finally. – angularsen

4

Para salir enérgicamente su solicitud lo antes posible puede utilizar Environment.FailFast()

15

Si quieres matar programa sin ningún mensaje de excepción de sistema, después, por ejemplo, error fatal, puede utilizar:

Process.GetCurrentProcess().Kill() 
+0

Usé este y funcionó, gracias. – Jeremy

13

pienso la mejor solución para obligar a salir de la aplicación es utilizar la siguiente línea de código:

Environment.Exit(0) 

Envrironment.FailFast() termina con una excepción en tiempo de ejecución.

+1

Gracias - esto funcionó mejor para mí ya que quería evitar excepciones. – stuzor

0

Esto podría ser una respuesta irrelevante si está buscando un código C# puro para finalizar su aplicación, pero puede usar un sistema nativo de procesos de terminación como taskkill, que terminará su aplicación con seguridad.

Pruébalo. Agregue la referencia del sistema primero.

using System.Diagnostics; 

Dondequiera que necesita para terminar el proceso,

String process = Process.GetCurrentProcess().ProcessName; 
Process.Start("cmd.exe", "/c taskkill /F /IM " + process + ".exe /T"); 
  • /F - Fuerzas para terminar.
  • /T - Termina el árbol de proceso (proceso y cualquier otro proceso iniciado por él).
  • /IM - Nombre de la imagen o nombre del proceso.
Cuestiones relacionadas