我读到WP7使用BackStack表示应用程序的背面导航。
在我的应用程序中,有2页
- 第1页:有局部变量int count1和dispatchertimertimer1
- 第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 ,请记住存储计数,以便您可以跟踪用户关闭的位置。