2017-05-30 39 views
2

例如,如果我有一个UserControl或一个Page在其代码隐藏文件中创建自己的事件,那么当该Page或控件卸载时,是否必须确保它的事件已取消订阅?我的意思是没有外部订阅。每个用户是自包含的,所以我认为,一旦控制卸载时不会有问题:我是否必须在所有情况下退订所有事件?

public sealed partial class MyPage : Page 
{ 
    public MyPage() 
    { 
     this.Unloaded += Page_Unloaded; 
     this.Tapped += Page_Tapped; 
    } 

    private void Page_Tapped(object sender, TappedRoutedEventArgs e) 
    { 
     // Do some work here. 
    } 

    private void Page_Unloaded(object sender, RoutedEventArgs e) 
    { 
     // Is the following appropriate and REQUIRED? 

     this.Unloaded -= Page_Unloaded; 
     this.Tapped -= Page_Tapped; 
    } 
} 

回答

3

不,你并不需要退订。您不会创建任何其他对MyPage的引用。当每个请求完成并且MyPage的每个实例超出范围时,都不会引用需要删除的实例。

2

不,在正常情况下 - 卸载不是必需的。但是,如果您创建了自己的静态代理,那么您必须记得卸载它们 - 因为当您的实例超出范围时它们不会被删除。

相关问题