我不确定在以下情况下是否能够对子窗口进行垃圾收集。
- 用户控件包含“显示弹出”命令
- 该命令创建一个子窗口,并为“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
在关闭后处理吗?