【问题标题】:MessageBox.Show in App Closing/Deactivated events应用程序关闭/停用事件中的 MessageBox.Show
【发布时间】:2013-05-06 22:19:59
【问题描述】:

我在 Windows Phone 7/8 应用程序的应用程序关闭/停用方法中显示了一个 MessageBox。它用于警告用户由于应用程序正在关闭而禁用活动计时器。 App Closing/Deactivated 事件非常适合这一点,因为将逻辑放在所有应用程序页面中将是一个杀手 - 太多的页面和导航路径。这很好用 - 消息框在 WP7 中显示 OK。

我也知道breaking changes in the API of WP8。里面明确说明 MessageBox.Show in Activated and Launching 会导致异常。

问题是在 WP8 中,消息框不会在应用关闭时显示。代码执行无异常,但没有出现消息。

附:我在 MS WP Dev 论坛上问过这个问题,但显然没人知道。

【问题讨论】:

    标签: windows-phone windows-phone-8


    【解决方案1】:

    将 msgBox 代码从应用关闭事件中移到您的主页代码隐藏中。覆盖后退按键事件并将您的代码放在那里。这就是它在 7.x 上的实现方式:

    protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
            {
                if (MessageBox.Show("Do you want to exit XXXXX?", "Application Closing", MessageBoxButton.OKCancel) == MessageBoxResult.Cancel)
                {
                    // Cancel default navigation
                    e.Cancel = true;
                }
            }
    

    仅供参考 - 在 WP8 上,您似乎必须将 MsgBox Show 分派到新线程。

    这会在应用程序真正开始在事件模型中关闭之前提示用户。如果用户接受后退键,则允许发生,否则取消。您不允许覆盖主页按钮按下,它必须始终立即进入主屏幕。您应该查看后台代理以通过挂起/恢复来保留您的计时器代码。

    【讨论】:

    • 它没有用——OnBackKeyPress 仍然是一个页面方法——所以我需要在 10+ 个页面中实现和维护它。更糟糕的是,它无法解决快速切换问题 - 没有按下 Back :)
    • 在 App.xaml.cs 中仍然可以这样做:只需挂接 RootFrame 的导航事件,只有在 backstack 为空时才触发上述代码(即 CanGoBack 为 false)
    • 当然,Inkog 没有费心去阅读 breaking changes 链接,所以他没有意识到他的代码会使应用程序崩溃.您需要 dispatch 调用 MessageBox.Show 设置 e.Cancel = true; 之后!
    • 克劳斯,我不认为你会费心阅读我的帖子。我不仅注意到代码是针对 7.x 的,而且之后我还直接指出了 8 中的调度更改。我是新来的,但我认为这样一个“排名很高”的人会在评论其他人如何未能阅读之前完整阅读帖子。
    【解决方案2】:

    在 RootFrame 上注册 BackKeyPress 事件。

    RootFrame.BackKeyPress += BackKeyPressed;
    private void BackKeyPressed(object sender, CancelEventArgs e)
        {
            var result = (MessageBox.Show("Do you want to exit XXXXX?", "Application Closing", MessageBoxButton.OKCancel));
            if (result == MessageBoxResult.Cancel)
            {
                // Cancel default navigation
                e.Cancel = true;
            }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-12
      • 1970-01-01
      • 2011-06-18
      • 2018-12-13
      • 1970-01-01
      相关资源
      最近更新 更多