2009-03-17 12 views
2

静的メソッドに静的メソッドがあります。静的メソッドには一時的にアタッチしています。メモリにハングしたくない場合や、2つのイベントハンドラを起動している状況になる場合があります。それを2回呼ぶ。インライン静的イベントの削除

私はこれらが静的であるべきか否かについてはほとんど言及しておらず、議論/リファクタリング責任を持たないことを望んでいます。

は当初、私はこれが正常に動作してきたが、私は、イベントをインラインで処理するために希望の方法で別のイベントと一致するように、だけでなく、設定解除この

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 
    } 
} 

ようにそれをやっていましたブール値は、関数に対してローカルで、他のイベントで使用されます。

public static void DoSomething() 
{ 
    try 
    { 
     bool cancel = false; 
     MyStaticClass.MyEvent +=new EventHandler<HandledEventArgs>(delegate(object sender, HandledEventArgs e) 
     { 
      cancel = true; 
     }) 
     ... //Doing Stuff dependent on cancel = false; 
    } 
    finally 
    { 
     //??? 
    } 
} 

私の質問は、シナリオ2では、どのようにして静的イベントをクリーンアップおよびデタッチできますか?

答えて

4

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

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

乾杯を、今、私はそれを見るように明らかなようです:) – johnc

1

は基本的には、ちょうどデリゲートであなたのインラインメソッドを保存し、あなたの最後に中にそれを解除this thread for a great approach.

を参照してください。あなたはこのような何かを試みることができる

関連する問題