0

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 によって破棄されることを覚えていますか?

そして、いつ匿名の代理人が処分するのですか?

皆さんありがとう。

4

2 に答える 2