2010-10-07 14 views
48

Il mio programma WPF 4.0 (C# .Net 4.0) basato su GUI funziona con il database SQL Server . Ogni volta che eseguo la mia applicazione crea una connessione a SQL Server tramite ADO.NET Entity Framework e, se SQL Server non è raggiungibile, genera un'eccezione e mostra MessageBox con notifica.Il modo giusto per chiudere l'applicazione della GUI WPF: GetCurrentProcess(). Kill(), Environment.Exit (0) o this.Shutdown()

Ora voglio che dopo aver letto questo messaggio l'applicazione si spenga. 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 uccidere processo di applicazione in Windows Task Manager.

Voglio sapere:

  1. Qual è la differenza tra loro?
  2. In che modo si chiuderà la mia applicazione più velocemente?
  3. Quale metodo 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 di chiudere un'applicazione GUI WPF?

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

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

Grazie.

risposta

67

Application.Current.Shutdown() è il modo corretto di arrestare un'applicazione. Generalmente perché attivare gli eventi di uscita che è possibile gestire more

Process.GetCurrentProcess().Kill() deve essere utilizzato quando si desidera chiudere l'applicazione. more

Ad1. La natura di questi metodi è completamente diversa. Il processo di spegnimento può essere sospeso per terminare alcune operazioni, uccidere forzare l'applicazione a chiudere.

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

Ad3. Spegni perché spara l'evento close

Ad4. Questo dipende da cosa è this.

+0

>> Ad4. Questo dipende da cosa sia. Chiaro la funzione di connessione nel costruttore App.cs, quindi «questo» - è l'istanza di App-class. –

+0

Uso Process.GetCurrentProcess(). Kill() quando l'app non riesce a trovare un contesto dati (dove tutto è stato salvato) e l'utente rifiuta di dire all'app dove si trova. Dal momento che nulla può essere salvato comunque, l'app si auto-immola. – HiredMind

2

Use Application.Current.Shutdown();

Add ShutdownMode="OnMainWindowClose" in App.xaml

+0

Per informazioni sulla modalità di arresto: 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

non è necessario aggiungere nulla all'App XAML –

0

@Damian Leszczyński - la risposta di Vash copre praticamente le 4 domande specifiche che hai chiesto. Per la tua domanda finale su Application.Exit(), questo è un evento a cui puoi iscriverti, non un metodo che puoi chiamare.Dovrebbe essere utilizzato 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 
} 
Problemi correlati