MessageBox.Show在App Closing / Deactivated事件中

时间:2012-11-16 15:47:11

标签: windows-phone windows-phone-8

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

我也知道breaking changes in the API of WP8。在那里明确指出MessageBox.Show在Activated和Launching中将导致异常。

问题是在WP8中,应用程序关闭时不会显示消息框。代码执行无例外,但不显示任何消息。

P.S。我在MS WP Dev论坛上问了这个,但显然没有人知道。

2 个答案:

答案 0 :(得分:1)

将msgBox代码从应用关闭事件移动到主页代码隐藏中。覆盖onback键按下事件并将代码放在那里。这是在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分配给新线程。

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

答案 1 :(得分:0)

在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;
        }
}