2009-03-17 5 views
2

J'ai un événement statique dans une méthode statique auquel je suis temporairement attaché, car je ne veux pas qu'il traîne en mémoire, ou je me retrouve dans une situation où je déclenche deux gestionnaires d'événements si je appelez le deux fois. Je n'ai pas grand-chose à dire si elles devraient être statiques ou non, et je préférerais ne pas avoir la responsabilité de la discussion/refactor.Suppression d'un événement statique en ligne

Au début, je faisais comme ça

public static void DoSomething() 
{ 
    try 
    { 
     MyStaticClass.MyEvent +=new EventHandler<HandledEventArgs>(MyStaticClass_HandleMe); 
     ... //Doing Stuff 
    } 
    finally 
    { 
     MyStaticClass.MyEvent -=new EventHandler<HandledEventArgs>(MyStaticClass_HandleMe);//Detach from event 
    } 
} 

Cela a fonctionné très bien, mais je voudrais gérer la ligne d'événements, d'être en accord avec un autre événement dans la méthode, ainsi que la fixation d'un annuler booléen qui est local à la fonction et utilisé par l'autre événement. Ma question est, dans le scénario 2, comment puis-je nettoyer et me détacher de l'événement statique?

Répondre

4

Vous pouvez essayer quelque chose comme ceci:

public static void DoSomething() 
{ 
    bool cancel = false; 
    EventHandler<EventArgs> handler = delegate { cancel = true; }; 

    try 
    { 
     MyStaticClass.MyEvent += handler; 
    } 
    finally 
    { 
     MyStaticClass.MyEvent -= handler; 
    } 
} 
+0

Cheers, il semble si évident maintenant je le vois :) – johnc

1

Voir this thread for a great approach.

Fondamentalement, stocker simplement votre méthode inline dans un délégué, et résilier votre abonnement lors de votre enfin.

Questions connexes