2014-10-09 59 views
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應用程序不同。

如何防止多訂閱?謝謝。

回答

0

1)不要在頁面中訂閱,而要在App.Xaml.cs中進行訂閱。

2)在OnNavigatedFrom方法退訂:

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

由於太但是,這僅限於此頁面,並且,如果我在頁面的「OnNavigatedFrom」方法中取消訂閱,下次訂閱發生在哪裏? – user4126589 2014-10-09 18:39:17

+0

該訂閱正在頁面的構造函數中生成,因此每次返回頁面時都會重新生成訂閱。這是導致問題的原因。 – 2014-10-09 19:13:24

+0

我個人喜歡在'OnNavigatedTo'中訂閱/取消訂閱,因爲兩種方法通常彼此相鄰,所以很容易看到我是否忘記了。在'OnNavigatedTo'中訂閱有什麼固有的壞處? – 2014-10-10 18:01:40

相關問題