1

我正在 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-问题是游戏页面的构造函数已执行,尽管我告诉他导航到主菜单而不是返回游戏页面。

4

1 回答 1

2

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

更新:

所以我需要指出的第一件事是你在这里误导了用户。他们正在按下后退按钮,而是完成了向前导航。这不仅会在那个时候让用户感到困惑,而且当他们在 MainMenu 页面上并按下后退按钮时会发生什么?他们会返回结果页面(那将是最后一件事)?但是你已经从后台绕了一个弯路,所以用户记住的路是什么和它最终是什么已经不同了。这是可能导致您的提交失败的类型(5.2.4.1 – 返回按钮:上一页)。

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

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

于 2012-12-30T17:33:32.273 回答