次のシナリオで子ウィンドウをガベージコレクションできるかどうかはわかりません。
- ユーザーコントロールには「showpopup」コマンドが含まれています
- このコマンドは子ウィンドウを作成し、「Closed」イベントの匿名リスナーを追加します。
public partial class MainPage : UserControl
{
public ICommand PopupCommand { get; private set; }
public MainPage()
{
InitializeComponent();
PopupCommand = new DelegateCommand(arg =>
{
var child = new ChildWindow();
child.Closed += (sender, args) =>
{
MessageBox.Show("You closed the window!");
};
child.Show();
});
}
}
PopupCommand
のデリゲートにはまだローカルchild
変数への参照が含まれているように見えるので、メモリを呼び出すたびにPopupCommand
リークメモリが発生しますか?child
それとも、ガベージコレクターは、閉じられた後に破棄できることをどういうわけか認識しますか?