该页面可能不在视图中,但它仍在运行 - 只是没有在屏幕上绘制。当您返回页面时,您拥有的任何变量仍然存在。类似地,像 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
,您的计时器将停止并终止。您应该确保在发生这种情况时重新启动/重新创建您拥有的任何计时器。如果您要对某些内容进行计数,请记住存储计数,以便您可以跟踪用户离开的位置。