我只是想确保以下代码不会导致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) { }
感谢您的帮助。
答案 0 :(得分:0)
这很好。 loginWindows的Close事件知道你的处理程序,而不是相反的方式,因此表单不会有任何关系阻止GC提取它。
如果定义了事件的对象将在应用程序中持续很长时间(并且您不希望事件处理程序关联持续相同的持续时间),则取消注册事件处理程序变得很重要。