今天写代码的时候遇到一个问题,在wp8中执行下面的代码后,弹出对话框后,停滞一段时间程序退出。
protected override void OnBackKeyPress(CancelEventArgs e) { try{ MessageBoxResult result = MessageBox.Show("确定要退出吗?", "提示", MessageBoxButton.OKCancel); if (result == MessageBoxResult.OK) { base.OnBackKeyPress(e); } else { e.Cancel = true; } } catch (Exception ex) { e.Cancel = true; }}
感觉很奇怪,以前wp7就这么写的一直没有问题啊......
于是各种找原因,最后看到了后,才知道wp8中对此处做了修改。
MessageBox.Show(String) 和MessageBox.Show(String, String, MessageBoxButton)在 Windows Phone 8 中,如果您调用 Show 中的 OnBackKeyPress(CancelEventArgs) 或 BackKeyPress 事件的处理程序,应用将退出。您可以通过在不同的线程上调用Show 来解决此问题,如以下步骤所述。1.重写 BackKeyPress 或为BackKeyPress 事件创建处理程序。2.将 Cancel 设置为 true 以取消后退键按键操作3.调度一种方法,显示MessageBox。4.如果用户选择退出应用,请调用 Terminate(),否则不要执行任何操作。
这样我就对上面的代码进行了修改,代码如下,运行后不再出现停滞一段时间崩溃的现象
protected override void OnBackKeyPress(CancelEventArgs e) { e.Cancel = true; this.Dispatcher.BeginInvoke(() => { MessageBoxResult result = MessageBox.Show("确定要退出吗?", "提示", MessageBoxButton.OKCancel); if (result == MessageBoxResult.OK) { Application.Current.Terminate(); } });}
参考文章: