2010-10-07 14 views
48

Mi GUI basado en escritorio WPF 4.0 (C# .Net 4.0) funciona con la base de datos SQL Server . Cada vez que ejecuto mi aplicación, crea una conexión con SQL Server a través de ADO.NET Entity Framework y, si SQL Server no es accesible, arroja una excepción y muestra MessageBox con notificación.Forma correcta de cerrar la aplicación WPF GUI: GetCurrentProcess(). Kill(), Environment.Exit (0) o this.Shutdown()

Ahora quiero que después de que el usuario lea este mensaje la aplicación se cierre. He encontrado tres maneras de hacer esto:

Process.GetCurrentProcess().Kill(); 

o

this.Shutdown(); // Application.Current.Shutdown() 

o

System.Environment.Exit(0); 

Todos ellos trabajan bien y hacer lo que necesito - Cierra la aplicación y matar el proceso de aplicación en Windows Administrador de tareas.

Quiero saber:

  1. ¿Cuál es la diferencia entre ellos?
  2. ¿De qué manera cerraré mi aplicación más rápido?
  3. ¿Qué manera de cerrar la aplicación debo usar?
  4. ¿Es Application.Current.Shutdown() y this.Shutdown() de la misma manera para cerrar la aplicación?

¿O tal vez hay otra forma más adecuada de cerrar una aplicación WPF GUI?

Application.Exit() no funciona para mí, como me sale el error:

The event ' System.Windows.Application.Exit ' can only appear on the left-hand side of += or -=

Gracias.

Respuesta

67

Application.Current.Shutdown() es la forma correcta de cerrar una aplicación. En general, porque se activan los eventos de salida que puede manejar more

Process.GetCurrentProcess().Kill() se deben usar cuando desea matar la aplicación. more

Ad1. La naturaleza de esos métodos es totalmente diferente. El proceso de apagado se puede pausar para finalizar algunas operaciones, matar a la aplicación para que se cierre.

Ad2. Probablemente Kill() sea la manera más rápida, pero esto es algo así como el kernel panic.

Ad3. Apagado porque desencadena el evento cerrado

Ad4. Eso depende de qué es this.

+0

>> Ad4. Eso depende de lo que sea esto. Llamo a la función de conexión en el constructor App.cs, así que «esto» - es una instancia de la clase de la aplicación. –

+0

Uso Process.GetCurrentProcess(). Kill() cuando la aplicación no puede encontrar un contexto de datos (donde todo está guardado), y el usuario se niega a decirle a la aplicación dónde está. Como no se puede guardar nada, la aplicación simplemente se inmola. – HiredMind

2

Use Application.Current.Shutdown();

Add ShutdownMode="OnMainWindowClose" in App.xaml

+0

Para obtener información sobre el modo de apagado: https://msdn.microsoft.com/en-us/library/system.windows.application.shutdownmode(v=vs.110).aspx – CRice

1
private void ExitMenu_Click(object sender, RoutedEventArgs e) 
    { 
     Application.Current.Shutdown(); 
    } 
+0

, no es necesario que agregue nada a la aplicación .xaml –

0

@Damian Leszczyński - La respuesta de Vash cubre más o menos las 4 preguntas específicas que solicitó. Para su pregunta final en Application.Exit(), es un evento al que puede suscribirse, no es un método al que puede llamar.Se debe usar así:

Application.Current.Exit += CurrentOnExit; 
//this.Exit += CurrentOnExit; would also work if you're in your main application class 

... 

private void CurrentOnExit(object sender, ExitEventArgs exitEventArgs) 
{ 
    //do some final stuff here before the app shuts down 
} 
Cuestiones relacionadas