Je suis nouveau sur C # et j'ai essayé de regarder les articles précédents mais je n'ai pas trouvé de bonne réponse.
Dans une application Windows Form C # avec un seul formulaire, est-ce que l'utilisation est Form.Close()
meilleure ou Form.Dispose()
?
MSDN indique que toutes les ressources de l'objet sont fermées et que le formulaire est supprimé lorsqu'une fermeture est appelée. Malgré cela, j'ai rencontré plusieurs exemples en ligne qui suivent une mise au rebut plutôt qu'une clôture.
L'un a-t-il un avantage sur l'autre? Dans quels scénarios devrions-nous préférer l'un à l'autre?
form.Visible = false;
vous pouvez appelerform.Hide()
. En fait,form.Hide()
définit simplementthis.Visible = false;
.Réponses:
Ce forum sur MSDN vous le dit.
la source
En règle générale, je préconiserais toujours d'appeler explicitement la méthode Dispose pour toute classe qui la propose, soit en appelant directement la méthode, soit en l'enveloppant dans un bloc "using".
Le plus souvent, les classes qui implémentent IDisposible le font car elles encapsulent une ressource non gérée qui doit être libérée. Alors que ces classes doivent avoir des finaliseurs qui agissent comme une sauvegarde, l'appel de Dispose aidera à libérer cette mémoire plus tôt et avec une surcharge réduite.
Dans le cas de l'objet Form, comme le lien vers Kyra l'a noté, la méthode Close est documentée pour appeler Dispose en votre nom, vous n'avez donc pas besoin de le faire explicitement. Cependant, pour moi, cela a toujours eu l'impression de s'appuyer sur un détail d'implémentation. Je préfère toujours appeler Close et Dispose pour les classes qui les implémentent, pour se prémunir contre les changements / erreurs d'implémentation et dans un souci de clarté. Une méthode Dispose correctement implémentée doit pouvoir être invoquée en toute sécurité plusieurs fois.
la source
Ne pas appeler permet
Close
probablement de contourner l'envoi de nombreux messages Win32 que l'on pourrait penser être quelque peu importants bien que je ne puisse pas vous dire spécifiquement pourquoi ...Close
a l'avantage de déclencher des événements (qui peuvent être annulés) de telle sorte qu'un étranger (au formulaire) puisse surveillerFormClosing
etFormClosed
réagir en conséquence.Je ne sais pas si
FormClosing
et / ouFormClosed
sont soulevés si vous disposez simplement du formulaire, mais je vous laisse l'expérimentation.la source
L'utilisation
using
est un très bon moyen:using (MyForm foo = new MyForm()) { if (foo.ShowDialog() == DialogResult.OK) { // your code } }
la source
Fermer () - la ressource gérée peut être temporairement fermée et peut être ouverte à nouveau.
Dispose () - supprime définitivement les ressources gérées ou non gérées
la source
ShowDialog()
. Sinon,Close()
supprimera également le formulaire.Si vous utilisez form.close () dans votre formulaire et définissez l'événement FormClosing de votre formulaire et que vous utilisez form.close () dans cet événement, vous tombez dans une boucle illimitée et un argument hors de portée s'est produit et la solution est de changer le formulaire .close () avec form.dispose () dans Event of FormClosing. J'espère que cette petite astuce vous aidera !!!
la source
Ce que je viens d'expérimenter avec les outils de diagnostic VS, c'est que j'ai appelé this.Close () puis l'événement formclosing déclenché. Ensuite, lorsque j'appelle this.Dispose () à la fin de l'événement Formclosing où je dispose de nombreux autres objets, il nettoie tout beaucoup plus en douceur.
la source