2017-05-30 96 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

不,在正常情況下 - 卸載不是必需的。但是,如果您創建了自己的靜態代理,那麼您必須記得卸載它們 - 因爲當您的實例超出範圍時它們不會被刪除。

相關問題