Windows Phone Back KeyPress+MessageBox在没有选择的情况下使应用程序崩溃

本文关键字:情况下 应用程序 崩溃 有选择 Phone Back KeyPress+MessageBox Windows | 更新日期: 2023-09-27 18:26:46

我在代码背后覆盖BackkeyPress函数时遇到了一个奇怪的问题,在函数内部我有一个简单的消息框,可以返回或取消导航(停留在当前页面),当没有选择(确定或取消)并且Messagebox长时间打开时,应用程序崩溃,当我尝试调试时,除非按下"确定"或"取消",否则不会引发异常,并且应用程序仍处于该状态,但在正常运行(没有调试器)时,崩溃是显而易见的。

    protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
    {
        string caption = "exit?";
        string message = "Do you still want to exit?";
        e.Cancel = MessageBoxResult.Cancel == MessageBox.Show(message, caption,           
        MessageBoxButton.OKCancel);
        base.OnBackKeyPress(e);
    }

Windows Phone Back KeyPress+MessageBox在没有选择的情况下使应用程序崩溃

http://msdn.microsoft.com/en-US/library/windowsphone/develop/jj206947(v=vs.105).aspx

在Windows Phone 8中,如果您在OnBackKeyPress(CancelEventArgs)或BackKeyPress的处理程序事件,应用程序将退出。

您可以通过在另一个线程上调用Show来解决此问题如以下步骤所述。覆盖BackKeyPress或创建BackKeyPress事件的处理程序。将Cancel设置为true以取消按后退键的动作。分派一个显示MessageBox。如果用户选择离开应用程序,请调用Terminate(),否则,什么也不做。

我找到了另一个解决方案,所以我认为如果我把它发布在这里会很好。不过这只是一个变通办法。

private async void PhoneApplicationPage_BackKeyPress (object sender, System.ComponentModel.CancelEventArgs e)
{
     e.Cancel = true;
     await Task.Delay(100);
     if (MessageBox.Show(msg, cap, MessageBoxButton.OKCancel) == MssageBoxResult.OK)
     {
          //somecode
     }                
}

使用Terminate()时,请注意,与正常退出关联的许多app.xaml.cs rootFrame导航事件不会触发,ApplicationClosing或页面的OnNavigatedFrom都不会触发。所以,检查一下发生的事情是否重要。你可以在终止之前加上它。。。