0

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

我有一个Threading.Timer每 15 分钟触发一次的实例。如果我调用PhotoChooser视图然后从中选择一张照片,当返回调用页面时,我的应用程序会调用该计时器的回调!我尝试了不同的定时器,要么是来自线程命名空间的定时器,要么是调度器定时器。

在我的应用程序中也会发生同样的情况,我按住设备的后退按钮,然后从列表中选择应用程序。

我的应用程序尽可能简单 - 带有回调的计时器和调用 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
}
4

2 回答 2

2

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

您需要以某种方式将计时器超时存储在您的应用程序状态中,或者将初始超时设置为 15 分钟,这样它就不会立即触发。NavigatedFrom要存储应用程序状态,请查看链接的文章,如果您可以在后面的页面代码中超载,建议您这样做。

在计时器触发之前剩下的时间有点困难。我想知道DateTime.UtcNow在创建计时器时需要获取超时时间(您可以将其存储在应用程序状态中)并计算下一次它将在恢复应用程序时触发的时间。

于 2012-09-09T14:58:18.203 回答
1

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

于 2012-09-10T14:01:54.897 回答