2012-04-11 5 views
1

可能性の重複:基本的に、私は(デタッチ匿名のEventHandler

private void AttachEvent(AwesomeObject someObject) 
    { 
     int id = GetCurrentIdValue(); 
     someUnknownClass.SomeEvent +=() => someObject.CreateAwesomeness(id); 
    } 

:OK
Unsubscribe anonymous method in C# How do I Unregister 'anonymous' event handler

は、私は次のコードを持って言うことができますイベントハンドラでローカル変数を使用する必要性を説明しようとしています。 this threadで提案されている)。メモリ管理の観点からは、ハンドラにハンドルがないため、someUnknownClass.SomeEventから切り離すことはできません。さらに、someUnknownClassが第三者型であると仮定しましょう。そのクラス内にコードを追加して、イベントを内部的にデタッチすることはできません。

私の質問は、匿名メソッドをイベントハンドラとして使用できるうちにメモリリークを回避するにはどうすればよいですか。

+0

と同様に:http://stackoverflow.com/questions/1348150/how-do-i-unregister-anonymous-event-handlerとhttp://stackoverflow.com/questions/2051357/c-sharp-adding削除イベント、匿名イベントハンドラなどがあります。 – Oded

+0

特にlambdasについては、ここで答えてください:http://stackoverflow.com/a/1362244/1583 – Oded

答えて

0

あなたの使用方法ではありません。あなたができることは、そのメソッドを変数に代入することです。の場合、には+-というイベントから変数が割り当てられます。しかし、このようにして、あなたは閉鎖が通常あなたに与える「自然な」感情を緩めます。