J'ai une application publiée en C #. Le problème ici est que chaque fois que je ferme le formulaire principal en cliquant sur le bouton de sortie rouge, il ferme le formulaire mais ne ferme pas l'application. J'ai découvert cela lorsque j'ai essayé d'arrêter l'ordinateur, espérant que l'application que je faisais fonctionnait correctement, puis j'ai été bombardée par de nombreuses fenêtres enfants avec lesquelles j'ai mis des MessageBox
alertes.
J'ai essayé Application.Exit
mais il appelle toujours toutes les fenêtres et alertes enfant et je ne sais pas comment utiliser Environment.Exit
et quel entier y mettre.
Soit dit en passant, chaque fois que mes formulaires appellent l' événement formclosed
or form closing
, je ferme l'application avec une this.Hide()
fonction; Cela affecte-t-il le comportement actuel de ma candidature?
Réponses:
Depuis MSDN:
Application.Exit
Environment.Exit
Cet article, Application.Exit vs Environment.Exit , pointe vers une bonne astuce:
Vous pouvez déterminer si
System.Windows.Forms.Application.Run
a été appelé en vérifiant laSystem.Windows.Forms.Application.MessageLoop
propriété. Si true, Run a été appelé et vous pouvez supposer qu'une application WinForms s'exécute comme suit.Référence: Pourquoi Application.Exit ne fonctionnerait-il pas?
la source
Application.Exit()
n'a pas pu quitter l'application, mais aEnvironment.Exit(1)
fonctionné comme un charme.Environment.Exit(0)
toute valeur non nulle est censée être un code d'erreur spécifique à l'application qui pourrait être utilisé par un script pour prendre les mesures appropriées. (Il s'agit d'un nouveau code et d'une application WinForms, il est donc peu probable dans ce cas, mais bon à savoir pour quiconque écrit des outils de ligne de commande.)Environment.Exit
peut également être utilisé pour l'application de formulaires.return
déclaration ultérieure améliorerait beaucoup cette approche. Si j'ai bien compris, le code continuera son exécution aprèsApplication.Exit()
unereturn
déclaration.Je sais que ce n'est pas le problème que vous avez rencontré, mais une autre raison pour laquelle cela peut arriver est que vous avez un thread non d'arrière-plan ouvert dans votre application.
Quand
IsBackground
estfalse
il gardera votre programme ouvert jusqu'à ce que les finalise de fil, si vous définissezIsBackground
autrue
fil ne sera pas garder ouvert le programme. Des choses commeBackgroundWoker
,ThreadPool
etTask
tous utilisent en interne un thread avecIsBackground
set totrue
.la source
Tout ce dont tu as besoin c'est
System.Environment.Exit(1);
Et il utilise l'espace de noms système "using System" qui est à peu près toujours là lorsque vous démarrez un projet.
la source
Je voudrais soit l'un des suivants:
pour un winform ou
pour une application console (fonctionne aussi sur les winforms).
Merci!
la source
Bref, oui. L'application entière se terminera lorsque le formulaire principal (le formulaire démarré via
Application.Run
dans laMain
méthode) sera fermé (non masqué).Si votre application entière doit toujours se terminer complètement chaque fois que votre formulaire principal est fermé, vous devez simplement supprimer ce gestionnaire fermé de formulaire. En n'annulant pas cet événement et en le laissant se fermer lorsque l'utilisateur le ferme, vous obtiendrez le comportement souhaité. Comme pour tous les autres formulaires, si vous n'avez pas l'intention de montrer à nouveau la même instance du formulaire, vous les laissez simplement se fermer, plutôt que d'empêcher la fermeture et de les masquer. Si vous les montrez à nouveau, alors les cacher peut être bien.
Si vous voulez que l'utilisateur puisse cliquer sur le "x" de votre formulaire principal, mais qu'un autre formulaire reste ouvert et, en fait, devienne le "nouveau" formulaire principal, alors c'est un peu plus compliqué. Dans un tel cas, vous devrez simplement masquer votre formulaire principal plutôt que de le fermer, mais vous devrez ajouter une sorte de mécanisme qui fermera réellement le formulaire principal lorsque vous voulez vraiment que votre application se termine. Si c'est la situation dans laquelle vous vous trouvez, vous devrez ajouter plus de détails à votre question décrivant quels types d'applications doivent et ne doivent pas réellement mettre fin au programme.
la source
Est ce que tu fais:
dans votre Main ()?
J'ai trouvé que c'était un moyen très simple de tuer l'application lorsque le formulaire était fermé.
la source
la source
Dans ce cas, la façon la plus appropriée de quitter l'application pour remplacer la méthode onExit () dans App.xaml.cs:
la source