0

为简单起见,我创建了一个新应用程序,其中包含 MainPage 和 Page2。MainPage 有一个按钮,用于导航到 Page2。同时覆盖 MainPage.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);
    }

Page2 为空,除了重写 OnNavigateFrom,模拟从 Page2 回到 MainPage 的长时间操作:

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

一切都很好,但是当我在第 2 页时,很快按 3-4 次返回键,然后我看到消息框弹出两次。我希望消息框不显示,或者至少显示和隐藏。我的代码有什么问题吗?谢谢。

4

1 回答 1

0

这取决于您的意思是非常快...

代码看起来不错(除了Thread.Sleep这可能是为了模拟 UI 线程上的长时间操作)。

我希望这是因为当 UI 线程忙(或“睡眠”)时,后退按键仍在注册并被发送到应用程序,当 UI 线程再次可用时,它将一个接一个地处理它们。

这是一个很好的例子,说明了为什么应该避免阻塞 UI 线程。

于 2012-11-30T18:52:33.673 回答