Depuis PPMM
est une longue durée de vie de l'objet (singleton), ce code n'a pas beaucoup de sens.
Le problème ici est que tant que le gestionnaire d'événements est en faisant référence à l'objet, elle ne sera pas éligible pour la collecte des ordures, du moins aussi longue que celle d'un autre objet qui est propriétaire de l'événement est vivant.
En tant que tel, de mettre n'importe quoi dans le destructeur est inutile, soit:
- Le gestionnaire d'événement a déjà été supprimé, ainsi que l'objet est devenu admissible pour la collecte des ordures
- Le gestionnaire d'événement n'est pas supprimé, c'est le propriétaire de l'objet n'est pas admissible pour la collecte des ordures, et donc le finaliseur ne sera jamais appelé
- Les deux objets sont admissibles pour la collecte des ordures, dans ce cas, vous ne devez pas accéder à cet autre objet, dans le finaliseur puisque vous ne connaissez pas son état interne
En bref, ne faites pas cela.
Maintenant, un autre argument peut être dit à propos de l'ajout d'un tel code de l' Dispose
méthode, lorsque vous êtes à la mise en œuvre de IDisposable
. Dans cette affaire, il rend parfaitement logique, puisque son code d'utilisateur appelant Dispose
, à une prédéfinis et point contrôlé.
Le finaliseur (destructeur), cependant, est seulement appelée lorsque l'objet est admissible pour la collecte des ordures et a un finaliseur, auquel cas il n'y a pas de point.
Comme pour la question nbr. 2, que je prends comme "puis-je me désabonner à partir d'événements comme ça", alors oui, vous le pouvez. Le seul moment où vous en avez besoin pour tenir à l'délégué que vous avez utilisé pour vous inscrire avec, c'est quand vous êtes à la construction de la délégué autour d'une méthode anonyme ou d'une expression lambda. Lorsque vous êtes à la construction autour d'une méthode existante, il va fonctionner.
Edit: WPF. droit, de ne pas voir que la balise. Désolé, le reste de ma réponse n'a pas beaucoup de sens pour WPF et depuis je ne suis WPF-gourou, je ne peux pas vraiment dire. Cependant, il y a un moyen de résoudre ce problème. Il est tout à fait légal ici sur AFIN de récupérer le contenu d'une autre réponse si vous pouvez l'améliorer. Donc si quelqu'un sait comment faire cela avec un WPF usercontrol, vous êtes libre de soulever l'ensemble de la première partie de ma réponse et ajoutez le bits de WPF.
Edit: Permettez-moi de répondre à la question dans le commentaire à l'intérieur ici.
Depuis la classe en question est un contrôle utilisateur, sa durée de vie sera liée à un formulaire. Lorsque le formulaire est en cours de fermeture, il va disposer de tous les contrôles enfants qu'il possède, en d'autres termes, il existe déjà une méthode dispose ici présents.
La façon correcte pour un contrôle à l'utilisateur de gérer la situation, si elle gère ses propres activités, est de décrocher les gestionnaires d'événements dans la méthode dispose.
(reste supprimé)