2012-11-30 129 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线程。