2
我不确定在以下情况下是否可以对子窗口进行垃圾回收。匿名委托事件侦听器是否会阻止垃圾收集?
- 用户控件包含一个“秀弹出”命令
- 的命令创建一个子窗口,并增加了一个匿名侦听器“关闭”事件。
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
?
相关:detaching anonymous listeners from events in C# and garbage collection
我认为这是重复的:http://stackoverflow.com/questions/9591195/detaching-anonymous-listeners-from-events-in-c-sharp-and-garbage-collection – Jwosty
你需要有一个 - 你不会..? http://stackoverflow.com/questions/4303922/removing-anonymous-event-handler – MethodMan
@DJKRAZE它看起来像你实际上不需要' - ='。这对我来说也是令人惊讶的。 – McGarnagle