0
我訂閱OrientationChanged
事件在構造是這樣的:如何在Windows運行時應用程序中正確訂閱事件?
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
事件兩次,再次處理3次,依此類推。
它似乎在不刪除以前的訂閱的情況下再次訂閱該事件。它不僅適用於方向改變事件,也適用於其他任何事件。
我以爲我可以在OnNavigatedFrom
方法上取消訂閱,但它似乎不能保證與以前的Windows Phone Silverlight應用程序不同。
如何防止多訂閱?謝謝。
由於太但是,這僅限於此頁面,並且,如果我在頁面的「OnNavigatedFrom」方法中取消訂閱,下次訂閱發生在哪裏? – user4126589 2014-10-09 18:39:17
該訂閱正在頁面的構造函數中生成,因此每次返回頁面時都會重新生成訂閱。這是導致問題的原因。 – 2014-10-09 19:13:24
我個人喜歡在'OnNavigatedTo'中訂閱/取消訂閱,因爲兩種方法通常彼此相鄰,所以很容易看到我是否忘記了。在'OnNavigatedTo'中訂閱有什麼固有的壞處? – 2014-10-10 18:01:40