wp8 在OnBackKeyPress事件中调用MessageBox.Show()崩溃

今天写代码的时候遇到一个问题,在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();
        }
    });
}

 参考文章:http://msdn.microsoft.com/zh-CN/library/windowsphone/develop/jj206947(v=vs.105).aspx

 

 

原文地址:https://www.cnblogs.com/qq278360339/p/3216877.html