web-dev-qa-db-fra.com

Bonne façon de fermer l'application GUI WPF: GetCurrentProcess (). Kill (), Environment.Exit (0) ou this.Shutdown ()

Mon programme de bureau graphique WPF 4.0 (C # .Net 4.0) fonctionne avec la base de données SQL Server. Chaque fois que j'exécute mon application, il crée une connexion à SQL Server via ADO.NET Entity Framework et si SQL Server n'est pas accessible, il lève une exception et affiche MessageBox avec notification.

Maintenant, je veux qu'après que l'utilisateur ait lu ce message, l'application se fermera. J'ai trouvé trois façons de procéder:

Process.GetCurrentProcess().Kill();

ou

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

ou

System.Environment.Exit(0);

Tous fonctionnent bien et font ce dont j'ai besoin - fermer l'application et tuer le processus de l'application dans le Gestionnaire des tâches de Windows.

Je veux savoir:

  1. Quelle est la différence entre eux?
  2. De quelle manière fermera mon application plus rapidement?
  3. Quelle façon de fermer l'application dois-je utiliser?
  4. Application.Current.Shutdown() et this.Shutdown() sont-ils de la même manière pour fermer l'application?

Ou peut-être existe-t-il un autre moyen plus approprié de fermer une application graphique WPF?

Application.Exit() ne fonctionne pas pour moi car j'obtiens l'erreur:

L'événement 'System.Windows.Application.Exit' Ne peut apparaître que sur le côté gauche de + = ou - =

Merci.

49
Mike B.

Application.Current.Shutdown() est le moyen approprié pour arrêter une application. Généralement parce que déclenchez les événements de sortie que vous pouvez gérer plus

Process.GetCurrentProcess().Kill() doit être utilisé lorsque vous voulez tuer l'application. plus

Ad1. La nature de ces méthodes est totalement différente. Le processus d'arrêt peut être interrompu pour mettre fin à certaines opérations, tuer forcer l'application à se fermer.

Ad2. Kill() sera probablement le moyen le plus rapide, mais c'est quelque chose comme la panique du noyau.

Ad3. Arrêter car il déclenche l'événement de fermeture

Ad4. Cela dépend de ce que this.

Utilisez Application.Current.Shutdown ();

Ajouter ShutdownMode = "OnMainWindowClose" dans App.xaml

2
Dark Knight
private void ExitMenu_Click(object sender, RoutedEventArgs e)
    {
        Application.Current.Shutdown();
    }
1
David Fawzy

@Damian Leszczyński - La réponse de Vash couvre à peu près les 4 questions spécifiques que vous avez posées. Pour votre dernière question sur Application.Exit(), c'est un événement auquel vous pouvez vous abonner, pas une méthode que vous pouvez appeler. Il devrait être utilisé comme ceci:

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
}
1
HotN