La façon de vous désabonner à partir d'un événement qui utilise une expression lambda?
J'ai le code suivant pour laisser le GUI répondre à un changement dans la collection.
myObservableCollection.CollectionChanged += ((sender, e) => UpdateMyUI());
Tout d'abord est-ce une bonne façon de le faire?
Deuxième: quel est le code pour vous désinscrire de cette manifestation? Est-ce la même chose mais avec l' -= (et puis l'anonymat complet de la méthode de nouveau)?
Voir ceci.
Je n'ai pas mis mon expression lambda dans un délégué (comme dans votre lien), donc je n'ai pas de référence pour vous désabonner.
Est-il une raison pour laquelle vous ne pouvez pas/ conserver une référence, comme dans qui a accepté de répondre?
?Dupliquer: stackoverflow.com/questions/183367/...
Je n'ai pas mis mon expression lambda dans un délégué (comme dans votre lien), donc je n'ai pas de référence pour vous désabonner.
Est-il une raison pour laquelle vous ne pouvez pas/ conserver une référence, comme dans qui a accepté de répondre?
?Dupliquer: stackoverflow.com/questions/183367/...
OriginalL'auteur Gerrie Schenck | 2009-04-30
Vous devez vous connecter pour publier un commentaire.
Si vous avez besoin de vous désabonner à partir d'un événement, vous avez besoin d'un instanciées de référence. Malheureusement, cela signifie que vous ne pouvez pas utiliser cette syntaxe particulière.
Merci pour l'explication.
Yep, c'est ce que je voulais dire par "que la syntaxe particulière". Et je suis totalement d'accord avec vous.
OriginalL'auteur J. Steen
Tout d'abord... oui c'est un bon moyen de le faire, c'est propre, petit et facile à lire & comprendre... l'inconvénient est bien sûr "Sauf si vous souhaitez vous désabonner".
Je crois Jon Skeet fait avant que
"la spécification explicite ne garantit pas le comportement de toute façon quand il s'agit de l'équivalence des délégués créé avec les méthodes anonymes."
Donc, si vous devez vous désabonner de l'événement à une date ultérieure, vous auriez mieux fait de créer une instance de délégué de sorte que vous pouvez accrocher à la référence pour plus tard.
De même que le type de l'événement, qui dans cet exemple serait
NotifyCollectionChangedEventHandler
OriginalL'auteur Eoin Campbell
C'est un ok de chemin à faire, à moins que myObservableCollection va vivre plus longtemps que "ce", dans ce cas, vous pourriez vous retrouver avec une fuite de mémoire, en tant que délégué, qui est créé en coulisses permettront de conserver une référence à votre "il", qui permettra de la garder vivante. Si vous êtes à plusieurs reprises de la création et de "détruire" tout ce qui est à l'écoute de l'événement, vous trouverez qu'ils ne sont pas collectés par le garbage collector.
Si c'est un problème, vous pouvez aller de l'itinéraire proposé dans les réponses, la conservation d'une référence à la gestionnaire, vous devez créer d'abord.
Une autre solution est d'utiliser de faibles références pour créer un gestionnaire d'événement qui va permettre à l'abonné d'être collectées que si il n'y a pas d'autres références. J'ai exploré cette solution dans cette question et la réponse.
OriginalL'auteur Benjol