WP7页面似乎还活着



我读到WP7使用BackStack表示应用程序的背面导航。

在我的应用程序中,有2页

  1. 第1页:有局部变量int count1和dispatchertimertimer1
  2. 第2页:有局部变量int count2和dispatchertimertimer2

timer1在第1页中的回调用于记录count1 value

timer2在第2页中的回调用于记录count2 值。

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

我以为Page1被推到背面,它是停用的。但是Timer1仍然以count1增量??

运行

问题2 在第2页中,我启动timer2,然后返回到第1页。

我认为第2页被处置。但是Timer2仍然以Count2增量运行?

该页面可能无法查看,但仍在运行 - 只是没有在屏幕上绘制。返回页面时,您拥有的任何变量仍然存在。同样,诸如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时,您的计时器就会停止并杀死。您应该确保重新启动/重新创建发生这种情况时的任何计时器。而且,如果您要保留某物的 count ,请记住存储计数,以便您可以跟踪用户关闭的位置。

最新更新