2

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

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

    }
4

3 回答 3

4

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

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

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

于 2013-08-07T10:37:04.777 回答
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
     }                
}

资源

于 2014-07-02T08:39:01.380 回答
-1

使用 Terminate() 时 - 请注意,与正常退出相关的许多 app.xaml.cs rootFrame 导航事件不会触发,ApplicationClosing 或您的页面的 OnNavigatedFrom 都不会触发。因此,请检查发生的任何事情是否重要。您可以在终止之前将其添加...

于 2017-01-08T03:38:40.133 回答