Question

J'ai une condition dans laquelle je dois fermer l'application et j'appelle this.Dispose () quand je mis un drapeau certian.

Au début, je pensais que c'était un problème d'appeler des fonctions après que je l'appelle this.Dispose () et donc je me suis déplacé le code à la dernière chose appelée, mais je reçois toujours un « ArgumentException était non gérée » « Le paramètre est pas valide « . Sur le Application.Run (nouveau myApp ();. Ligne

Qu'est-ce que je fais mal? Ai-je raté quelque chose le long du chemin? Ou peut-être il y a une meilleure façon de fermer l'application?

Était-ce utile?

La solution

Essayez d'utiliser Application.Exit() pour quitter l'application.

Lorsque vous utilisez Application.Run(new MyForm());, une boucle de message est créé sur le thread en utilisant l'objet de formulaire comme la principale forme. Il essaie de transmettre des messages Win32 qui viennent à l'application de leurs objets respectifs. Cependant, lorsque vous appelez Dispose() sur l'objet formulaire, vous ne l'avez pas encore sorti de la boucle de message. Quand il tente de livrer le message suivant à votre objet de formulaire, il échoue, car il est déjà disposé et jette l'exception. Vous devez soit demander le formulaire à fermer (en appelant Close sur la forme), qui sera ensuite demander à la forme pour traiter l'événement et si terminé, quittez la boucle de message après. L'autre façon (plus de manière directe) est de fermer la boucle de message sur le fil tout à fait en appelant Application.Exit() ce qui entraînera à fermer toutes les formes connexes.

Autres conseils

Vous devriez utiliser pour fermer votre principale forme this.Close () plutôt que this.Dispose ().

si vous fermez l'application et le déchargement ainsi AppDomain vous n'avez pas vraiment besoin d'appeler Dispose () puisque tout le AppDomain sera supprimé de la mémoire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top