如何在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应用程序不同,这似乎不能保证会发生。
如何防止多重订阅?谢谢
1)不要在页面中订阅,而是在App.Xaml.cs中订阅。
2) 在OnNavigatedFrom方法中取消订阅:
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
deviceOrientationSensor.OrientationChanged -= OrientationChanged;
}