您的位置:首页 > 其它

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

2013-07-26 13:02 253 查看
今天写代码的时候遇到一个问题,在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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: