StackPanel 内で UserControl を変更 (ナビゲート) できる WPF MainWindow があります。
// on code behind of MainWindow
RootStackPanel.Children.Clear();
UserControl1 uc1= new UserControl1();
uc1.CustomizedEvent1+= EventHandler1;
uc1.CustomizedEvent2+= EventHandler2;
uc1.Loaded += (s, e1) =>
{
// Do something
};
// Unsubscribe external event to prevent memory leak
uc1.Unloaded += (s, e1) =>
{
uc1.CustomizedEvent1 -= EventHandler1;
uc1.CustomizedEvent2 -= EventHandler2;
};
RootStackPanel.Children.Add(uc1);
// same for UserControl 2,3,4....
数時間実行するとアプリケーションがクラッシュするため、Unloaded イベント ハンドラーを匿名デリゲートに追加して、UserControl のすべてのイベントのサブスクライブを解除してメモリ リークを防止しました。Anonymous Delegate でアンロードするとメモリ リークが発生しますか? はいの場合、Unloaded を呼び出さずに UserControl のすべてのイベントのサブスクライブを解除する方法は?
Loaded、Unloaded などの内部イベントは GC によって破棄されることを覚えていますか?
そして、いつ匿名の代理人が処分するのですか?
皆さんありがとう。