使用ChildWindows的事件处理程序内存泄漏

时间:2012-04-10 19:49:50

标签: c# silverlight events

我只是想确保以下代码不会导致GC在此情况下永远不会收集ChildWindow登录。只是为了澄清示例,这来自一个由所有其他页面继承的silverlight页面,因此虚拟的void pageloaded方法。

public class MyPage : Page
{
    // Executes when the user navigates to this page.
    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        _user = App.AuthenticatedUser;
        if (!_user.IsValid)
        {
            Login loginWindow = new Login(_user);
            loginWindow.Closed += new EventHandler(PageLoaded);
            loginWindow.Show();
        }
        else
            PageLoaded(this, e);
    }

    //to be overridden by the pages extending this page control
    protected virtual void PageLoaded(object sender, EventArgs e) { }

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

这很好。 loginWindows的Close事件知道你的处理程序,而不是相反的方式,因此表单不会有任何关系阻止GC提取它。

如果定义了事件的对象将在应用程序中持续很长时间(并且您不希望事件处理程序关联持续相同的持续时间),则取消注册事件处理程序变得很重要。