如何在Windows运行时应用程序中正确订阅事件

本文关键字:事件 应用程序 Windows 运行时 | 更新日期: 2023-09-27 18:26:08

我在构造函数中订阅OrientationChanged事件,如下所示:

public SecondPage()
{
    this.InitializeComponent();
    deviceOrientationSensor = SimpleOrientationSensor.GetDefault();
    if (deviceOrientationSensor != null)
    {
        deviceOrientationSensor.OrientationChanged += OrientationChanged;
    }
}

然后:

private void OrientationChanged(SimpleOrientationSensor sender, SimpleOrientationSensorOrientationChangedEventArgs args)
{
    deviceOrientation = args.Orientation;
    // the rest...
}

所以问题是,当我导航回另一个页面或进入手机启动屏幕时,下次它会处理两次OrientationChanged事件,然后再处理三次,以此类推

它似乎在没有删除以前的订阅的情况下再次订阅了该事件。它不仅发生在方向改变事件中,也发生在任何其他事件中。

我想我可以在OnNavigatedFrom方法上取消订阅,但与以前的Windows Phone Silverlight应用程序不同,这似乎不能保证会发生。

如何防止多重订阅?谢谢

如何在Windows运行时应用程序中正确订阅事件

1)不要在页面中订阅,而是在App.Xaml.cs中订阅。

2) 在OnNavigatedFrom方法中取消订阅:

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
  deviceOrientationSensor.OrientationChanged -= OrientationChanged;
}