Depuis quelques années que j'utilise C # (Windows Forms), je n'ai jamais utilisé WPF. Mais, maintenant j'aime WPF, mais je ne sais pas comment je suis censé quitter mon application lorsque l'utilisateur clique sur l'élément de menu Quitter dans le menu Fichier.
J'ai essayé:
this.Dispose();
this.Exit();
Application.ShutDown();
Application.Exit();
Application.Dispose();
Parmi beaucoup d'autres. Rien ne fonctionne.
Application.Current.Shutdown();
votre fonction ne reviendra pas immédiatement. Vous devez également appelerreturn;
pour cela.Application
n'est PAS une classe statique. Avoir unApplication.Current
membre statique ne signifie pas qu'il est statique. Au lieu de cela, c'est une classe normale qui peut être dérivée.Si vous en avez vraiment besoin pour fermer, vous pouvez également utiliser Environment.Exit () , mais ce n'est pas du tout gracieux (plus comme mettre fin au processus).
Utilisez-le comme suit:
la source
Environment.Exit()
a besoin d'au moins un paramètre, un code de sortie. À utiliserEnvironment.Exit(0)
si vous n'êtes pas préoccupé par le code de sortie.Application.Current.Shutdown();
Application.Current.Shutdown();
monClosing
événement a été appelé, quand je voulais simplement arrêter mon application immédiatement. Alors ,Environment.Exit(0);
était le meilleur choix.Comme l'a dit wuminqi ,
Application.Current.Shutdown();
est irréversible, et je pense qu'il est généralement utilisé pour forcer une application à se fermer à certains moments, comme lorsqu'un utilisateur se déconnecte ou ferme Windows.Appelez plutôt
this.close()
dans votre fenêtre principale. Cela revient à appuyer sur Alt+ F4ou sur le bouton de fermeture [x] de la fenêtre. Cela entraînera la fermeture de toutes les autres fenêtres possédées et finira par appelerApplication.Current.Shutdown();
tant que l'action de fermeture n'a pas été annulée. Veuillez consulter la documentation MSDN sur la fermeture d'une fenêtre .En outre, comme il
this.close()
est annulable, vous pouvez placer une boîte de dialogue de confirmation des modifications dans le gestionnaire d'événements de fermeture. Créez simplement un gestionnaire d'événements<Window Closing="...">
et modifiez-le ene.Cancel
conséquence. (Voir la documentation MSDN pour plus de détails sur la façon de procéder.)la source
Utilisez l'un des éléments suivants, si nécessaire:
1.
2.
Surtout, les méthodes appellent
closing event
de laWindow
classe et l'exécution peut s'arrêter à un moment donné (car généralement les applications mettent des dialogues comme 'êtes-vous sûr?' Ou ' Voulez-vous enregistrer les données avant de fermer? ', Avant qu'une fenêtre ne soit complètement fermée)3. Mais si vous souhaitez mettre fin à l'application sans aucun avertissement immédiatement. Utiliser ci-dessous
la source
Cela devrait faire l'affaire:
Si vous êtes intéressé, voici quelques informations supplémentaires que j'ai trouvées utiles:
Détails sur l'application.
Cycle de vie des applications WPF
la source
Voici comment je fais le mien:
Je n'appelle que
Application.Current.ShutDown()
depuis la fenêtre principale de l'application, toutes les autres fenêtres utilisentthis.Close()
. Dans ma fenêtre principale,Window_Closing(...)
gère lex
bouton en haut à droite . Si l'une des méthodes appelle une fenêtre plus proche,Window_Closing(...)
saisit l'événement pour l'arrêt si l'utilisateur le confirme.La raison pour laquelle j'utilise en fait
Application.Current.Shutdown()
dans ma fenêtre principale est que j'ai remarqué que si une erreur de conception a été commise et que je n'ai pas déclaré le parent d'une de mes fenêtres dans une application, si cette fenêtre est ouverte sans être affichée auparavant à la dernière fermeture de fenêtre active, je me retrouve avec une fenêtre cachée fonctionnant en arrière-plan. L'application ne se fermera pas. La seule façon d'empêcher une fuite de mémoire complète est pour moi d'aller dans le Gestionnaire des tâches pour fermer l'application.Application.Current.Shutdown()
me protège contre les défauts de conception involontaires.Cela vient de mon expérience personnelle. En fin de compte, utilisez ce qui convient le mieux à votre scénario. Ceci est juste une autre information.
la source
Il ne devrait pas y avoir de message
Application.ShutDown();
ou.Exit()
.Application
est une classe statique. Il ne fait pas référence à l'application actuelle. Vous devez accéder à l'application actuelle, puis la fermer comme suit:la source
Une autre façon de procéder:
Cela forcera la suppression de votre application. Cela fonctionne toujours, même dans une application multi-thread.
Remarque: faites juste attention à ne pas perdre de données non enregistrées dans un autre thread.
la source
la source
Essayer
Pour moi
n'a pas fonctionné.
la source
Selon ma compréhension, a
Application.Current.Shutdown()
également son inconvénient.Si vous souhaitez afficher une fenêtre de confirmation pour permettre aux utilisateurs de confirmer la fermeture ou non,
Application.Current.Shutdown()
est irréversible.la source
Application.Current.Shutdown()
.En résumé, il y a plusieurs façons de le faire.
1) Tuer le processus, qui saute la finalisation, la gestion des erreurs, etc.:
2) Arrêter l'application actuelle, ce qui est probablement le bon moyen car elle appelle les événements de sortie:
ou
(lorsque clled dans une instance de classe App)
3) Fermeture de l'application actuelle (tous les formulaires doivent être fermés / terminés plus tôt):
(lorsque clled dans une instance de classe App)
4) Quitter l'environnement, ce qui met fin à l'application:
En outre, vous pouvez lire ici les statuts de sortie
la source
Caliburn micro aromatisé
la source
Si vous souhaitez quitter un autre thread qui n'a pas créé l'objet d'application, utilisez:
la source
Application.Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;
la source
A partir du code xaml, vous pouvez appeler un SystemCommand prédéfini:
Je pense que cela devrait être la voie préférée ...
la source