0

我只是想确保下面的代码不会导致在这种情况下 ChildWindow Login 永远不会被 GC 收集。只是为了澄清示例,这来自一个被所有其他页面继承的 silverlight 页面,因此是 virtual 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) { }

谢谢你的帮助。

4

1 回答 1

0

这可以。loginWindows 的 Close 事件知道您的处理程序,而不是相反,因此表单不会有任何关系阻止 GC 拾取它。

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

于 2012-04-10T20:17:44.723 回答