2012-06-13 28 views
6

私はButtonのリストを持っている、と私は各ボタンのイベントハンドラを追加します。イベントハンドラを削除する必要がありますか?

List<Button> buttons = new List<Button>(); 

for (int i = 0; i < 10; i++) 
{ 
    Button btn = new Button(); 
    btn.Click = new RoutedEventHandler(OnbtnClick); 
    buttons.Add(btn); 
} 

その後、私はリストをクリア:

/* Have I to remove all events here (before cleaning the list), or not? 
foreach (Button btn in buttons) 
    btn.Click -= new RoutedEventHandler(OnbtnClick); 
*/ 

buttons.Clear(); 
+0

私は間違っている可能性がありますが、私は信じられませんbtn.Click - = new RoutedEventHandler(OnbtnClick);最初に追加されたハンドラの代わりにnew演算子を使用しているので、ハンドラも削除されます。 –

+2

@KDiTraglia有効な構文です。[this](http://msdn.microsoft.com/en-us/library/aa645739(v=vs.71).aspx)チュートリアルを参照してください。 – gliderkite

+0

@gliderkiteああ私の間違い、私はそれがうまくいかなかったどこかの読書を覚えていると思った。 –

答えて

5

あなたはへのすべての参照あなたは明確なリストをクリアするとハンドラと一緒に。ハンドラがスコープを離れると(つまり、関数が最終的に終了し、作成されたハンドラへの参照を持つオブジェクトがない場合)、ガベージコレクタは関連するすべてのメモリを削除します(独自のスケジュールで)。

だから、手動でハンドラを削除する必要はありません。

関連する問題