wp8 在OnBackKeyPress事件中调用MessageBox.Show()崩溃
2013-07-26 13:02
253 查看
今天写代码的时候遇到一个问题,在wp8中执行下面的代码后,弹出对话框后,停滞一段时间程序退出。
感觉很奇怪,以前wp7就这么写的一直没有问题啊......
于是各种找原因,最后看到了这篇文章后,才知道wp8中对此处做了修改。
这样我就对上面的代码进行了修改,代码如下,运行后不再出现停滞一段时间崩溃的现象
参考文章:http://msdn.microsoft.com/zh-CN/library/windowsphone/develop/jj206947(v=vs.105).aspx
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
相关文章推荐
- 通过一个控件的KeyPress事件调用另一个控件的Click事件
- mousemove事件以及MessageBox.show()方法
- delphi 在别的方法 调用keypress事件
- QDialog 模态对话框与事件循环(exec其实就是调用了show和eventLoop.exec)
- javaweb开发-js代码中keypress事件调用判断,取得keyCode值
- 在System.Timers.Timer的处理程序中调用MessageBox.Show()弹出的确是非模态的
- NDK调用三方库崩溃--【事件记录及分析】
- 在异步回调中调用MessageBox.Show
- 调用MessageBox.Show没有来得及弹出对话框再次调用MessageBox.Show引起0x8000FFFF异常
- winform属性/事件/退出程序/ MessageBox.Show/TextBox和Label/Lbel实现跑马灯和闹钟/TextBox保存
- Delphi中主窗体的formshow事件在程序自动创建窗体对象前就调用的错误。
- 调用MessageBox.Show没有来得及弹出对话框再次调用MessageBox.Show引起0x8000FFFF异常
- Delphi中主窗体的formshow事件在程序自动创建窗体对象前就调用的错误。
- 返回调用事件的控件
- C# KeyPress 事件中,所有e.KeyChar值的意思
- 关于前台调用后台事件__doPostBack函数
- XMG 事件传递的调用 当事件传递给控件的时候就会调用,去寻找最合适的View,
- jQuery中.show()和.hide()和.click()和.toggle()事件
- C#控件中的KeyDown、KeyPress 与 KeyUp事件
- sTable - 一个支持子表、单元格合并、链式调用、事件代理功能的Mini表格组件