Comment quitter une application en C#?
J'ai publié une application en C#. Le problème ici, c'est chaque fois que je ferme le formulaire principal en cliquant sur le bouton rouge bouton de sortie, il ferme le formulaire, mais il ne ferme pas l'application. J'ai trouvé quand j'ai essayé d'éteindre l'ordinateur, l'espoir que la demande que j'ai faite était en cours d'exécution en douceur puis j'ai été bombardé par un grand nombre de fenêtres enfant avec lequel j'ai mis MessageBox Alertes.
J'ai essayé de l'Application.De sortie, mais il a encore fait appel à toutes les fenêtres enfants et des alertes, et je ne sais pas comment utiliser de l'Environnement.Sortie et qui entier mettre. Par la façon dont, à chaque fois que les formulaires de mon appel de la formclosed ou de la forme de clôture de l'événement je ferme l'application avec un this.Hide()
fonction. Cela affecte la façon dont mon application se comporte maintenant?
- Ne pas manipuler FormClosed ou FormClosing
- Donc, vous dites que vous êtes seulement de cacher les formes au lieu de se fermer? C'est probablement la raison de l'application n'est pas appelé à disparaître, il a encore ouvert (caché) des formes.
- Ensuite, je dois remplacer tous les de la ce.Hide() pour cela.Close()?
- Vous n'avez pas besoin de Cacher() ou Close().
- Poste le code relatives à la Proximité des événements et des actions.
- Êtes-vous le lancement des threads d'arrière-plan? Si vous laissez tous les autres threads actifs, le processus ne se termine pas par un gracieux moyens. Aussi, les références à d'autres formes/boîtes de dialogue doit être nettoyé lorsque vous fermez votre "main" de la forme. Tout non-éliminés des éléments d'interface comme celle-ci peut interférer avec un gracieux sortie.
Vous devez vous connecter pour publier un commentaire.
À partir de MSDN:
Application.Sortie
Environnement.Sortie
Cet article, Application.Sortie vs de l'Environnement.Sortie, des points en vue d'un bon conseil:
Vous pouvez déterminer si
System.Windows.Forms.Application.Run
a été appelé par la vérification de laSystem.Windows.Forms.Application.MessageLoop
de la propriété. Si la valeur est true, alors la course a été appelé et vous pouvez supposer que un WinForms application est en cours d'exécution comme suit.Référence: Pourquoi l'Application.La sortie ne parviennent pas à travailler?
Application.Exit()
pas réussi à quitter l'application, cependantEnvironment.Exit(1)
a travaillé comme un charme.Environment.Exit(0)
Toute valeur non nulle est destiné à être spécifique à l'application du code d'erreur qui pourrait être utilisé par un script de prendre les mesures appropriées. (C'est le nouveau code et une application WinForms, il est donc peu probable à la matière dans ce cas, mais bon à savoir pour quiconque écrit outils de ligne de commande.)Environment.Exit
peut être utilisée pour les formulaires de demande de trop.Je sais que ce n'est pas le problème que vous avez eu, cependant, une autre raison de ce qui pourrait arriver est que vous ne disposez pas d'un thread d'arrière-plan ouvert dans votre application.
Quand
IsBackground
estfalse
il gardera votre programme ouvert jusqu'à ce que le thread se termine, si vous définissezIsBackground
àtrue
le fil ne sera pas garder le programme à ouvrir. Des choses commeBackgroundWoker
,ThreadPool
, etTask
tous en interne l'utilisation d'un thread avecIsBackground
ensemble detrue
.Tous vous avez besoin est
System.Environment.Exit(1);
Et il utilise l'espace de noms system "à l'aide du Système" c'est à peu près toujours là lorsque vous démarrez un projet.
En bref, oui. L'ensemble de l'application prendra fin lorsque le formulaire principal (la forme lancé via
Application.Run
dans leMain
méthode) est fermé (non masqué).Si l'ensemble de votre application devrait toujours pleinement mettre fin à chaque fois que votre formulaire principal est fermé, vous devez simplement supprimer cette forme fermée gestionnaire. Par pas l'annulation de l'événement et de les laisser près lorsque l'utilisateur ferme, vous obtiendrez votre comportement souhaité. Comme pour toutes les autres formes, si vous n'avez pas l'intention de montrer que même instance de nouveau le formulaire que vous venez de les laisser fermer, plutôt que de le prévenir de la fermeture et de les cacher. Si vous êtes en leur montrant de nouveau, puis, cachant peut-être bien.
Si vous voulez être en mesure d'avoir de l'utilisateur, cliquez sur le "x" de votre formulaire principal, mais un autre formulaire de rester ouvert et, en effet, devenir la "nouvelle" forme principale, alors il est un peu plus compliqué. Dans un tel cas, vous aurez juste besoin de cacher votre formulaire principal plutôt que de le fermer, mais vous aurez besoin d'ajouter, dans une sorte de mécanisme qui va fait fermer le formulaire principal lorsque vous voulez que votre application à la fin. Si telle est la situation dans laquelle vous êtes, alors vous aurez besoin d'ajouter plus de détails à votre question en décrivant les types d'applications devrait et ne devrait pas réellement la fin du programme.
Je voudrais soit l'une des opérations suivantes:
pour une winform ou
pour une application console (travaux sur les winforms trop).
Merci!
Faites-vous:
dans votre Main()?
Je l'ai trouvé un moyen très facile de tuer l'application lorsque le formulaire est fermé.
Dans ce cas, la plupart de bonne façon de quitter l'application pour remplacer onExit() méthode d'Application.xaml.cs: