92 votes

C# Forme.Près vs Formulaire.Disposer

Je suis novice en C#, et j'ai essayé de regarder les messages antérieurs, mais n'a pas trouver une bonne réponse.

En C# Application Windows Form avec une forme simple, est à l'aide du Formulaire.Close() la meilleure ou la Forme.Dispose()

MSDN dit que toutes les ressources au sein de l'objet sont fermées et que le formulaire est supprimé quand un Proche est invoquée. En dépit de ce qui, j'en suis venu à travers plusieurs exemples en ligne qui suivent un Jetez plutôt que d'un Proche.

A-t-on un avantage sur les autres? En vertu de quels cas doit-on préférer l'un sur l'autre?

180voto

Kyra Points 2922

Ce forum sur MSDN vous dit.

Forme.Close() envoie la bonne version de windows les messages d'arrêter le win32 de la fenêtre. Au cours de ce processus, si l' le formulaire n'a pas été montré modal, Disposer est appelé sur la forme. Débarrasser de la forme libère les ressources non managées le formulaire est maintenant sur.

Si vous faites une form1.Show() ou Application.Run(new Form1()), d'en Disposer sera appelé lors de la Fermer() est appelée.

Toutefois, si vous ne form1.ShowDialog() pour afficher le formulaire modal, la forme ne seront pas éliminés, et vous aurez besoin d' pour appeler form1.Dispose() de vous-même. J' crois que c'est le seul moment où vous devriez vous inquiéter au sujet de l'élimination de la forme vous-même.

15voto

Jesse Squire Points 741

En règle générale, j'ai toujours défendre explicitement l'appel de la méthode dispose pour toute la classe qui le propose, soit par l'appel de la méthode directement ou en l'enveloppant dans une "aide" du bloc.

Le plus souvent, les classes qui implémentent IDisposible le font parce qu'ils enveloppez de la ressource non managée qui a besoin d'être libérée. Alors que ces classes doivent avoir les finaliseurs qui agissent comme une protection, le fait d'appeler dispose aidera à libérer de la mémoire plus tôt et avec moins de frais généraux.

Dans le cas de la Forme de l'objet, comme le lien bof Kyra a noté, la méthode Close est documenté pour invoquer Disposer sur votre compte de sorte que vous ne devez pas le faire explicitement. Cependant, pour moi, ça a toujours senti comme s'appuyant sur une implementaion détail. Je préfère toujours faire appel à la fois à Proximité et d'en Disposer pour les classes qui les mettent en œuvre, afin de se prémunir contre les modifications de mise en œuvre/erreurs et le souci d'être clair. Correctement mis en œuvre la méthode dispose doit être sûr d'invoquer plusieurs fois.

6voto

Reddog Points 7462

Pas d'appel Close probablement contourne l'envoi d'un bouquet de Win32 messages que l'on pense sont assez importantes bien que je ne pourrais pas vous dire pourquoi...

Close a l'avantage de faire passer des événements (qui peut être annulé) tels que de l'extérieur (pour la forme) pourrait regarder pour FormClosing et FormClosed afin de réagir en conséquence.

Je ne suis pas clair si FormClosing et/ou FormClosed sont augmentés si vous simplement jeter la forme, mais je vais laisser cela à vous d'expérimenter avec.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X