控件事件导致内存泄漏?

Controls events causes memory leaks?

订阅事件会导致内存泄漏吗?

也就是说,如果我在给定的页面中这样做

public TestPage()
{
    this.InitializeComponent();

    myButton.Click += MyButton_Click;

}

private void MyButton_Click(object sender, RoutedEventArgs e)
{
      Debug.WriteLine("Hello");
}

我需要打电话给

myButton.Click += MyButton_Click;

如果有,应该在哪里调用?

不,当页面超出范围时,CLR 会将其标记为准备好进行垃圾回收,包括其事件处理程序。您不需要在您的页面中注销事件处理程序。

当事件处理程序在 其他 个对象中时,情况与引发事件的对象不同。在你给出的例子中,情况并非如此。

如果订阅另一个对象的事件的对象首先超出范围,它必须取消订阅事件处理程序,否则它实际上只会在事件源也超出范围时被标记为垃圾回收。

如果引发事件的对象首先超出范围,则没有问题,因为订阅也会超出范围。