2012-10-23 49 views
2

我读到,WP7使用backstack来表示应用程序的后退导航。WP7页面似乎活着

在我的应用程序中,有

  1. 第1页共2页:有局部变量int COUNT1和DispatcherTimer 定时器1
  2. 第2页:有局部变量int COUNT2和DispatcherTimer 定时器

TIMER1在第1页回调用于登录的count1 ++值

定时器2的c系数page2中的allback用于记录count2 ++的值。

问题1 在页1,我启动timer1,然后导航到page2。

我以为page1被推到了backstack并且它是无效的。但是timer1仍然以count1递增的方式运行?

问题2在第2页中,我启动了timer2并返回到page1。

我以为page2是配置的。但是timer2仍然以count2递增的方式运行?

+0

为什么downvote me?我有非常明确的问题,我想知道WP7中的页面机制,因为它强烈影响我的应用程序 – onmyway133

回答

4

页面可能不在视图中,但它仍在运行 - 只是没有绘制到屏幕上。返回页面时,您拥有的任何变量仍将存在。同样,类似DispatcherTimer的任何内容都将继续存在,将继续保留,直到您停止为止。

一个直接的问题是,如果你没有保存对定时器的引用 - 如果你不这样做,你将无法阻止它!无论如何,这样的事情会工作:

protected void override OnNavigatedFrom(Object sender, NavigationEventArgs e){ 
    if (myTimer != null){ timer.Stop();} 
    e.OnNavigatedFrom(sender,e); 
} 

protected void override OnNavigatedTo(Object sender, NavigationEventArgs e){ 
    //create, or turn on your timer, etc. 
    e.OnNavigatedTo(sender,e); 
} 

这个想法基本上是你如何描述:当离开页面,'暂停'计时器。当你回来时,打开计时器。

问题2:

当您创建一个计时器,该变量它可以是本地的,但是从定时器产生的event是全球性的 - 当你做你需要它dispose用它。即不要不仅停止了,但除去事件本身 -

myTimer.Tick -= onTimerTick; // where onTimerTick is the name of your Event 

最后,

当你的应用程序变得Deactivated,你的计时器停止和杀害。您应该确保在发生这种情况时重新启动/重新创建任何定时器。如果你保持计数的东西,请记住存储计数,以便您可以跟踪用户离开的位置。

+0

谢谢。你的回答满足问题1但是在问题2中,我认为page2应该被处置,但是timer2仍然可以使用count2? – onmyway133

+0

@Yamamoto增加了一些信息 - 让我知道你是否需要更多信息。 :) –

+0

感谢您的答案。但是我认为当回到page1时,page2必须被杀死,并且count2也被杀死,但是timer2仍然可以使用count2? – onmyway133