2011-01-20 7 views
21

entiendo que hay algunas maneras de salir de una aplicación, como Application.Exit(), Application.ExitThread(), Environment.Exit(), etc.manera genérica para salir de una aplicación .NET

Tengo una biblioteca externa de "recursos comunes" y estoy tratando de crear un método FailIf genérico que registre el error en los registros, haga esto y aquello y esto y lo otro, y finalmente salga de la aplicación ... aquí hay una versión corta de eso.

public static void FailIf(Boolean fail, String message, Int32 exitCode = 1) 
    { 
     if (String.IsNullOrEmpty(message)) 
      throw new ArgumentNullException("message"); 

     if (fail) 
     { 
      //Do whatever I need to do 

      //Currently Environment.Exit(exitCode) 
      Environment.Exit(exitCode); 
     } 
    } 

He leído que el uso de Environment.Exit no es la mejor manera de manejar las cosas cuando se trata de Winform aplicaciones, y también cuando se trabaja con aplicaciones de WPF y Silverlight hay diferentes formas de salir ... Mi la pregunta es realmente:

¿Qué debo poner para salir con gracia para cubrir todos los tipos de aplicaciones?

+3

¿No puedes simplemente lanzar una excepción en lugar de hacer lo que obviamente es una afirmación? –

Respuesta

25

Lea esto acerca de la diferencia entre el uso de Medio Ambiente y Aplicación:

Application.Exit Vs Environment.Exit

Hay un ejemplo de lo que quiere hacer en la parte inferior de esa página:

if (System.Windows.Forms.Application.MessageLoop) 
{ 
    // Use this since we are a WinForms app 
    System.Windows.Forms.Application.Exit(); 
} 
else 
{ 
    // Use this since we are a console app 
    System.Environment.Exit(1); 
} 
+0

¿Esto también cuenta para las aplicaciones WPF? – michael

+0

Las aplicaciones de WPF generalmente se inician con un comando .Run() –

0

Recomendaría utilizando el manejo básico de excepciones, entonces en lugar de System.Environment.Exit (1) lanza una nueva ApplicationException (mensaje) que crea la excepción al método principal, en tu caso algo como esto:

try{ 
Application.Run(new MyForm()); 
} 
catch(ApplicationException){ 
// do custom cleanup/reporting 
} 

sólo asegúrese de iniciar la excepción desde el hilo principal, de lo invoca en él antes de tirar por supuesto

+0

Algún tiempo antes de la última vez que trabajé con winforms, por lo que no estoy seguro si las llamadas son correctas pero al menos se obtiene la idea, también vea Excepion – Polity

2

Si es sólo un aborto, use Environment.Exit(). Si se trata de algo muy crítico (que no puede manejar ningún tipo de limpieza), use Environment.FailFast().

Cuestiones relacionadas