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

我有一个奇怪的问题,在代码后面覆盖BackkeyPress函数,在函数内部我有一个简单的消息框来返回或取消导航(保留在当前页面中),当没有选择(ok或取消)并且Messagebox长时间打开时间,应用程序崩溃,当我尝试调试时,没有exception被抛出并且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); } 

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

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

您可以通过在另一个线程上调用Show来解决此问题,如以下步骤所述。 覆盖BackKeyPress或为BackKeyPress事件创建处理程序。 将取消设置为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。 因此,检查是否有任何重要事项。 您可以在终止之前解决它…