今天写代码的时候遇到一个问题,在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 中,如果您调用 Show 中的 OnBackKeyPress(CancelEventArgs) 或 BackKeyPress 事件的处理程序,应用将退出。 您可以通过在不同的线程上调用Show 来解决此问题,如以下步骤所述。
.重写 BackKeyPress 或为BackKeyPress 事件创建处理程序。
.将 Cancel 设置为 true 以取消后退键按键操作
.调度一种方法,显示MessageBox。
.如果用户选择退出应用,请调用 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