在所有情况下,我是否必须取消订阅所有活动?

时间:2017-05-30 20:12:51

标签: c# uwp

例如,如果我有一个UserControl或一个在其代码隐藏文件中创建自己的事件的页面,当该页面或控件卸载时,我是否必须确保其事件是取消订阅的?我的意思是没有外部订阅。每个订阅者都是独立的,所以我想一旦控件被卸载就没关系了:

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;
    }
}

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

不,在正常情况下 - 不需要卸货。

但是,如果您创建自己的静态委托,那么您必须记住卸载它们 - 因为当您的实例超出范围时它们不会被删除。