导航后,WP7页面仍在运行

时间:2012-12-30 08:47:56

标签: silverlight windows-phone-7

我在Silverlight中实现了一个有很多计时器的游戏。每次我从这个页面导航时,我都会停止所有这些计时器。

在某些情况下,当我从游戏页面导航到菜单页面时,游戏仍在运行,我听到了游戏的声音,虽然定时器都已停止。

有没有办法在导航时完全杀死WP7页面?

感谢。

更新:

方案如下:

1-玩家开始游戏。 2-游戏结束时,播放器将导航到结果页面。 3-当播放器在结果页面中并按下后退键时,将按如下方式处理:

    protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
    {
        e.Cancel = true;
        NavigationService.Navigate(new Uri("/Pages/MainMenu.xaml", UriKind.Relative));
    }

4-问题是游戏页面的构造函数是执行的,虽然我告诉他导航到主菜单不回到游戏页面。

1 个答案:

答案 0 :(得分:2)

你无法“杀死”一个页面。如果您正在进行向前导航,则页面将在后台保留(并继续运行),以便您可以使用后退按钮返回到该页面。如果您正在进行反向导航,那么页面将在某些时候被垃圾收集(假设您已取消所有事件,处理任何非托管资源等)。

<强>更新

所以我需要指出的第一件事是你在这里误导了用户。他们按下后退按钮,但是完成了前进导航。这不仅会使用户在那一刻感到困惑,而且当他们在MainMenu页面上并按下后退按钮时会发生什么?他们回到结果页面(这将是后台的最后一件事)吗?但是你已经绕道后退了,所以用户记得回来的路和它最终的结果已经不同了。这种情况可能导致您的提交失败(5.2.4.1 – Back button: previous pages)。

就第4个而言,导航回页面不会调用构造函数。只有在首次创建页面时才会调用它。另一方面,向该页面的向后或向前导航将调用OnNavigatedTo方法,因此请检查那里正在进行的工作。

我建议修复这两个问题:当游戏结束并且用户已导航到结果页面时,使用NavigationService.RemoveBackEntry()从backstack中完全删除游戏页面。这将允许垃圾收集器拾取页面(假设它没有任何其他对象持有对它的引用(见上文))并且将不再在用户按下后退按钮时所采用的路径中。如果上一页是MainMenu页面(我假设它是,基于名称),那么你的问题就解决了。如果不是,可能是时候重新考虑您的导航路径......