zoukankan      html  css  js  c++  java
  • 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

     

     

  • 相关阅读:
    MySQL MHA高可用方案
    微服务架构的基础框架选择:Spring Cloud还是Dubbo?
    elasticsearch
    spring Cloud构建微服务架构
    SpringBoot-Learning
    JetBrains激活
    正则表达式(java)规则大全
    Android调用Webservice
    UCML针对数据表的修改自定义维护数据变更记录
    SQL游标模板
  • 原文地址:https://www.cnblogs.com/qq278360339/p/3216877.html
Copyright © 2011-2022 走看看