这是一个非常奇怪的问题,我要求确认的所有人都说它发生了。
我有一个Threading.Timer
个实例,每15分钟触发一次。如果我调用PhotoChooser
视图然后从中选择一张照片,当返回到调用页面时,我的应用程序会调用该计时器的回调!我尝试了不同的计时器,它是来自Threading命名空间的Timer或Dispatcher计时器。
当我在我的应用程序中时,我会按住设备的后退按钮,然后从列表中选择应用程序。
我的应用程序尽可能简单 - 带回调的计时器和调用PhotoChooser的方法。有人可以帮忙解决方案或解决方法吗?
更新
我的代码构造如下:
private Timer _timer;
public void CallTimer()
{
var period = 15 * 1000 * 60;
_timer = new Timer(repeatTimer_Tick, null, 0, period);
}
private void repeatTimer_Tick(object state)
{
// Some action here
}
private void Stop()
{
if (_timer != null)
_timer.Dispose();
}
private void CallPhotoChooser()
{
// Some basic actions calling photochooser task
}
答案 0 :(得分:2)
正如Windows Phone 7 Tombstoning中所解释的,当用户按下并按住后退按钮时,应用程序很可能被逻辑删除,或者调用PhotoChooserTask
之类的启动器。除非在几秒钟内返回页面,否则会发生这种情况。
您需要以某种方式将计时器超时存储在应用程序状态,或将初始超时设置为15分钟,以免立即触发。要存储应用程序状态,请查看链接的文章,它建议在NavigatedFrom
事件中执行此操作,您可以在后面的页面代码中重载。
计时器开火前剩下的时间有点困难。我想要知道,在创建计时器时,你需要花费多长时间才能获得DateTime.UtcNow
(可以存储在应用程序状态中)的时间,并计算下次恢复应用程序时将触发的时间。
答案 1 :(得分:1)
您不应该创建那些长时间运行的计时器:)只需处理激活/停用并重置您的计时器,然后在照片选择器返回您的应用程序时恢复它们。