modo diritto di chiudere un'applicazione WPF GUI: GetCurrentProcess () kill (), Environment.Exit (0) o this.Shutdown ().

StackOverflow https://stackoverflow.com/questions/3880836

Domanda

Il mio desktop GUI basata su WPF 4.0 (C # .Net 4.0) funziona il programma con database SQL Server. Ogni volta che quando faccio funzionare la mia applicazione crea una connessione a SQL Server tramite ADO.NET Entity Framework e se SQL Server non è raggiungibile viene generata un'eccezione e spettacoli MessageBox con la notifica.

Ora voglio che dopo che l'utente leggere questa applicazione messaggio si spegne. Ho trovato tre modi per farlo:

Process.GetCurrentProcess().Kill();

o

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

o

System.Environment.Exit(0);

Tutti loro lavoro bene e fare quello che mi serve -. Chiudere l'applicazione e il processo di applicazione uccidere in Task Manager di Windows

Vorrei sapere:

  1. Qual è la differenza tra loro?
  2. In che modo si chiude la mia applicazione più veloce?
  3. Quale modo per chiudere l'applicazione dovrei usare?
  4. è Application.Current.Shutdown() e this.Shutdown() allo stesso modo per chiudere l'applicazione?

O forse c'è un altro, più adatto, modo per chiudere un'applicazione WPF GUI?

Application.Exit() non funziona per me, come ho l'errore:

  

L'evento 'System.Windows.Application.Exit' può apparire solo sul lato sinistro del + = o - =

Grazie.

È stato utile?

Soluzione

Application.Current.Shutdown() è il modo corretto di arresto un'applicazione. In generale perché gli eventi fuoco l'uscita che è possibile gestire più

Process.GetCurrentProcess().Kill() deve essere utilizzato quando si vuole uccidere l'applicazione. più

Ad1. La natura di tali metodi sono completamente differenti. Il processo di arresto può essere interrotta per terminare alcune operazioni, uccidere forzare l'close.

Ad2. Probabilmente Kill() sarà il modo più veloce, ma questo è qualcosa come kernel panic.

Ad3. Shutdown perché genera l'evento close

Ad4. Che dipendono ciò this è.

Altri suggerimenti

  

Usa Application.Current.Shutdown ();

     

Aggiungi ShutdownMode = "OnMainWindowClose" in App.xaml

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

@Damian Leszczyński - la risposta di Vash praticamente copre le 4 domande specifiche che hanno chiesto. Per la tua domanda finale su Application.Exit(), che è un evento è possibile sottoscrivere, non un metodo che si può chiamare. Dovrebbe essere usato in questo modo:

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
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top