En C#, j'ai pris l'habitude d'effacer tous les abonnements à mes événements personnalisés en Dispose()
pour éviter les fuites de mémoire des abonnés oubliant de se désabonner de mes événements.Est-il possible de supprimer un abonnement à un événement dans VB.NET?
C'était très simple à faire, simplement en appelant MyEvent = null
puisque le compilateur C# génère automatiquement un champ délégué. Malheureusement, dans VB.NET, il semble y avoir aucun moyen simple de le faire. La seule solution que j'ai trouvé était d'écrire un Custom Event
, en ajoutant des gestionnaires d'ajout et de suppression personnalisés appelant Delegate.Combine
/Delegate.Remove
, essentiellement ce que fait le compilateur C#. Mais avoir à le faire pour chaque événement juste pour pouvoir effacer les abonnements me semble un peu «exagéré».
Est-ce que quelqu'un a une autre idée pour résoudre ce problème? Merci.
Merci! Je n'ai pas vu cette section de la documentation, très utile. En utilisant la réflexion, cela semble assez lourd juste pour mettre certaines variables à zéro; mais très utile pour affirmer au débogage que chaque champ était correctement défini sur null. –
Je pensais qu'il pourrait y avoir une méthode générique ClearAllSubscriptions qui utilise la réflexion pour traiter n'importe quel type: alors tout ce dont vous avez besoin dans votre méthode Clear est 'ClearAllSubscriptions Me' – MarkJ