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();
4

2 に答える 2

6

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

いいえ、ハンドラーを手動で削除する必要はありません。

于 2012-06-13T18:14:38.313 に答える
1

この解決策を確認してください:コントロールからすべてのイベントハンドラーを削除する方法

これはあなたがそれの後のものです。この助けを願っています。

于 2012-06-13T18:20:01.740 に答える