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

时间:2013-08-07 09:55:18

标签: c# windows-phone-8 windows-phone

我有一个奇怪的问题,在代码后面覆盖BackkeyPress函数,在函数内部我有一个简单的消息框来返回或取消导航(保留在当前页面中),当没有选择时(确定或取消)和Messagebox是打开很长时间,应用程序崩溃,当我尝试调试时,没有异常被抛出并且App仍然处于状态,除非按下OK或取消,但是在正常运行(没有调试器)时崩溃是显而易见的。

    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);

    }

3 个答案:

答案 0 :(得分:4)

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

  

在Windows Phone 8中,如果您调用Show in   OnBackKeyPress(CancelEventArgs)或BackKeyPress的处理程序   活动,应用程序将退出。

     

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

答案 1 :(得分:0)

我找到了另外一个解决方案,所以我认为如果我在这里发布它会更好。这只是一种解决方法。

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
     }                
}

Source

答案 2 :(得分:-1)

使用Terminate()时 - 请注意,与正常退出关联的一些app.xaml.cs rootFrame导航事件不会触发,也不会触发ApplicationClosing或您的页面的OnNavigatedFrom。因此,检查是否有任何重要事项。你可以在终止之前解决这个问题......