从Photochooser挑选照片或拿着硬件后退按钮会导致活动定时器响铃

时间:2012-09-09 09:34:43

标签: windows-phone-7

这是一个非常奇怪的问题,我要求确认的所有人都说它发生了。

我有一个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
}

2 个答案:

答案 0 :(得分:2)

正如Windows Phone 7 Tombstoning中所解释的,当用户按下并按住后退按钮时,应用程序很可能被逻辑删除,或者调用PhotoChooserTask之类的启动器。除非在几秒钟内返回页面,否则会发生这种情况。

您需要以某种方式将计时器超时存储在应用程序状态,或将初始超时设置为15分钟,以免立即触发。要存储应用程序状态,请查看链接的文章,它建议在NavigatedFrom事件中执行此操作,您可以在后面的页面代码中重载。

计时器开火前剩下的时间有点困难。我想要知道,在创建计时器时,你需要花费多长时间才能获得DateTime.UtcNow(可以存储在应用程序状态中)的时间,并计算下次恢复应用程序时将触发的时间。

答案 1 :(得分:1)

您不应该创建那些长时间运行的计时器:)只需处理激活/停用并重置您的计时器,然后在照片选择器返回您的应用程序时恢复它们。