2012-11-30 165 views
0

爲了簡單起見,我創建了一個包含MainPage和Page2的新應用程序。 MainPage有一個導航到Page2的按鈕。還覆蓋MainPage.OnBackKeyPress:如何正確處理OnBackKeyPress?

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e) 
    { 
     if (MessageBox.Show("Quit?", "Confirm", MessageBoxButton.OKCancel) == MessageBoxResult.Cancel) 
      e.Cancel = true; 
     else 
      base.OnBackKeyPress(e); 
    } 

第二頁是空的,除了覆蓋OnNavigateFrom,以模擬長時間操作時,從第二頁返回炫魅:

protected override void OnNavigatedFrom(NavigationEventArgs e) 
    { 
     System.Threading.Thread.Sleep(1000); 
     base.OnNavigatedFrom(e); 
    } 

一切正常,但是當我在第2頁,然後按Back鍵3-4次很快,然後我看到消息框彈出兩次。 我期望消息框不顯示,或至少顯示和隱藏。我的代碼有什麼問題嗎?謝謝。

+0

我對我的應用做了一些改變:刪除Page2.OnNavigateFrom(),然後在MainPage中添加60個沒有事件處理按鈕的按鈕(只是爲了使MainPage'複雜',需要一些時間來加載)。那麼問題仍然可以重現。我怎樣才能避免這樣的問題? – wizardlee

回答

0

這取決於你的意思是很快的...

代碼看起來OK(除了Thread.Sleep這大概是模擬UI線程上長時間操作)。

我期望這是因爲當UI線程忙(或「睡眠」)時,後按鍵仍然正在註冊併發送到應用程序,並且當UI線程再次可用時,它將在其他。

這是一個很好的例子,說明爲什麼你應該避免阻塞UI線程。