Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/windows-phone-8/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows phone MessageBox.显示应用内关闭/停用事件_Windows Phone_Windows Phone 8 - Fatal编程技术网

Windows phone MessageBox.显示应用内关闭/停用事件

Windows phone MessageBox.显示应用内关闭/停用事件,windows-phone,windows-phone-8,Windows Phone,Windows Phone 8,我在WindowsPhone7/8应用程序的应用程序关闭/停用方法中显示了一个MessageBox。它用于警告用户由于应用程序正在关闭而禁用活动计时器。应用程序关闭/停用事件非常适合于此,因为在所有应用程序页面中放置逻辑将是一个杀手——导航页面和路径太多。这很好用-消息框在WP7中显示OK 我也知道。这里有明确的说明,MessageBox.Show在激活和启动时将导致异常 问题是,在WP8中,应用程序关闭时不会显示消息框。代码会毫无例外地执行,但不会显示任何消息 另外,我在微软WP开发者论坛上问

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

我也知道。这里有明确的说明,MessageBox.Show在激活和启动时将导致异常

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


另外,我在微软WP开发者论坛上问过这个问题,但显然没有人知道。

将msgBox代码从应用程序关闭事件移动到主页代码隐藏中。覆盖on back key press事件并将代码放在那里。这是在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分派给一个新线程


这会在应用程序在事件模型中实际开始关闭之前提示用户。如果用户接受,则允许按back键,否则取消。不允许您覆盖主屏幕按钮,它必须始终立即转到主屏幕。您应该查看后台代理,通过挂起/恢复来持久化计时器代码。

在根框架上注册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;
        }
}

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