Quelle est la différence entre Environment.Exit () et Application.Shutdown ()?
Parfois, l'application ne peut pas quitter quand j'ai appelé Application.Arrêtl'INTERFACE utilisateur a été fermé, mais le processus est toujours en cours d'exécution. comment l'arrêt de l'application à fermer tous les threads? le De l'environnement.Sortie() pourrait fermer tous les threads? ou devrions-nous appeler l'API Win32 TerminateThread pour le faire?
source d'informationauteur Cooper.Wu
Vous devez vous connecter pour publier un commentaire.
De l'environnement.Exit() est plus brutale de la fermeture de votre demande oui, mais en général, si vous avez besoin de votre tuer votre application pour la rendre proche alors je pense que vous regarder le problème dans le mauvais sens.
Vous devriez plutôt chercher les raisons ne sont pas les autres threads de clôture gracieusement ?
Vous pouvez regarder dans le FormClosing événement sur le formulaire principal et de fermer toutes les ressources c'est suspendue jusqu'à l'application de l'empêcher de partir à la clôture.
C'est de cette façon que j'ai trouvé ressources de la pendaison de l'application.
Être conscient que le filetage de la liste en mode de débogage affiche certains threads de s'exécuter, mais pas sous votre contrôle, ces fils anticipée ont un nom et lorsque vous cliquez sur eux, vous obtenez un message indiquant que vous n'avez pas de symboles. Ceux-ci peuvent être safly ignoré
L'une des raisons pour vous assurer que votre demande est en cours de fermeture gracieusement, c'est que si certaines ressources ( disons une FileStream ) n'est pas fait de travail, donc l'utilisation de certaines api pour le forcer à rapide pouvez faire toutes sortes de "hasard", les problèmes viennent, comme les paramètres/fichiers de données qui n'est pas écrit, et ainsi de suite.
Que Shay dit, ne JAMAIS appeler TerminateThread, TerminateThread tue juste un fil sans le laisser nettoyer après lui-même, cela peut conduire à des blocages et des corruptions dans les autres threads du processus.
TerminateProcess sur l'autre a va tuer l'ensemble du processus et de laisser l'OS clean up, c'est le moyen le plus rapide pour fermer un processus, vous avez juste à vous assurer que vous ne possédez pas de toutes les ressources de l'OS ne peut pas nettoyer (il permet également de fermer les fenêtres avant d'appeler TerminateProcess).
Je pense, mais je n'ai pas vérifié, que Environemnt.Sortie appels TerminateProcess.
Application.L'arrêt est très différent, il n'a pas tuer immédiatement le processus d' - il les envoie tous à la clôture et à l'arrêt des notifications et attend toutes les fenêtres de l'application et les fils de clôture.