2010-07-20 5 views
2

J'utilise événement TextChanged et je le désactiver où je ne ai pas besoin comme suitC# Désactiver gestionnaire d'événements Problème

object.Event -= new System.EventHandler(myHandler); 
//my code which doesn't need event handler 
object.Event += new System.EventHandler(myHandler); 

j'ai utilisé plusieurs fois comme ça. mais je avais besoin parfois 2 code de désactivation comme ceci:

object.Event -= new System.EventHandler(myHandler); 
object.Event -= new System.EventHandler(myHandler); 

bien sûr je l'ai terminé avec le code 2 permettre

object.Event += new System.EventHandler(myHandler); 
object.Event += new System.EventHandler(myHandler); 

je ne sais pas encore pourquoi je avais besoin 2 fois supprimer gestionnaire d'événements, mais cela a fonctionné génial.

mais dans un cas j'ai eu un problème.

ne fonctionne pas avec 2 codes de désactivation ou plus. Ma question est, comment puis-je regarder ce eventhandler s'il n'a besoin que d'un - = code ou plus? ou comment puis-je le gérer? j'ai toujours travaillé comme ça, pour vous assurer que je laisse toujours gestionnaire d'événements comme première fois

object.Event -= new System.EventHandler(myHandler); 
//my code which doesn't need event handler 
object.Event += new System.EventHandler(myHandler); 

Répondre

10

Mon conseil serait d'arrêter la suppression et re-ajouter le gestionnaire d'événements, et à la place, ajoutez un indicateur à votre gestionnaire d'événements lui-même, ce qui inhibe les activités que vous devez inhiber pendant ces sections du code.

Vous pouvez avoir un seul indicateur booléen ou utiliser un certain nombre de références, selon la façon dont vous devez gérer l'imbrication.

S'il existe une raison pour laquelle vous ne pouvez pas modifier le gestionnaire d'événements existant, qu'en est-il de la création d'un nouveau gestionnaire d'événements que vous attachez à Event et que vous appelez l'ancien?

+0

oui c'est plus efficace que d'activer et de désactiver le gestionnaire –

+0

je l'ai fait et ça marche très bien. Merci beaucoup – bilal

+0

Excellent! Content que ça aide. Vous êtes nouveau ici - n'oubliez pas de voter pour des choses que vous aimez ou que vous acceptez –

4

Vous devez supprimer un gestionnaire d'événements autant de fois que vous l'avez ajouté - et vous ne serez pas en mesure dire quand cela est, car les abonnements sont effectivement cachés à vous.

Idéalement, assurez-vous de vous abonner autant de fois que nécessaire, et il devrait être évident combien de fois vous avez besoin de vous désabonner aussi. Habituellement, ce sera une fois. C'est assez bizarre que vous ayez fini avec deux abonnements pour commencer ... Je suppose que cela peut indiquer un bug quelque part dans votre code.

Notez que le désabonnement à l'aide d'un gestionnaire d'événements qui n'est pas déjà abonné est un no-op.

(l'idée de la volonté du gestionnaire d'événement lui-même savoir si oui ou non il est vraiment « actif » est un bon aussi, d'ailleurs.)

Questions connexes