Windows phone 8 Windows Phone后台代理

Windows phone 8 Windows Phone后台代理,windows-phone-8,Windows Phone 8,关于代理的问题:我特别想创建一个定期任务,但只想每天运行一次,比如说凌晨1点,而不是默认的每30分钟运行一次。在OnInvoke中,我是否只需检查小时数,并仅在当前小时数与所需小时数匹配时运行它。 但在下一个OnInvoke呼叫中,它将尝试在30分钟后再次运行,可能是在凌晨1:31 所以我想我应该在应用程序设置中使用存储的布尔值来标记为“今天已经运行”或类似值,然后对照该值进行检查 如果您按日期(每天一次)执行任务,并且任务可以在每天晚上11点和次日凌晨1点运行是有效的,那么在代理运行后,您可以

关于代理的问题:我特别想创建一个定期任务,但只想每天运行一次,比如说凌晨1点,而不是默认的每30分钟运行一次。在OnInvoke中,我是否只需检查小时数,并仅在当前小时数与所需小时数匹配时运行它。
但在下一个OnInvoke呼叫中,它将尝试在30分钟后再次运行,可能是在凌晨1:31

所以我想我应该在应用程序设置中使用存储的布尔值来标记为“今天已经运行”或类似值,然后对照该值进行检查

如果您按日期(每天一次)执行任务,并且任务可以在每天晚上11点和次日凌晨1点运行是有效的,那么在代理运行后,您可以存储当前日期(忘记时间)。然后,每当代理在30分钟后再次运行时,检查任务上次运行的日期是否与当前日期相同

protected override void OnInvoke(ScheduledTask task)
{
    var lastRunDate = (DateTime)IsolatedStorageSettings.ApplicationSettings["LastRunDate"];

    if(DateTime.Today.Subtract(lastRunDate).Days > 0)
    {
        // it's a greater date than when the task last ran
        // DO STUFF!
        // save the date - we only care about the date part
        IsolatedStorageSettings.ApplicationSettings["LastRunDate"] = DateTime.Today;
        IsolatedStorageSettings.ApplicationSettings.Save();
    }
    NotifyComplete();
}

如果您特别希望在凌晨1点运行自定义操作,我不确定一个布尔值是否足以使其工作

我猜您计划在1:31重置布尔值,以准备第二天的执行,但如果您的定期任务也在1h51调用(即在凌晨1点到凌晨2点之间调用超过2次),该怎么办。 这怎么会发生?如果设备重新启动,可能会发生这种情况,但我不确定。在任何情况下,将上次执行日期时间存储在某处并将其与当前日期时间进行比较都是一种更安全的方法,可以确保您的操作每天只调用一次

还有一个问题:在哪里存储布尔值或日期时间(取决于您将选择哪一个)? AppSetting似乎不是推荐的位置:

在前台应用程序和后台代理之间传递信息 可能具有挑战性,因为无法预测代理是否 应用程序将同时运行。建议采取以下措施: 这方面的模式

  • 对于周期性和资源密集型代理:使用LINQ 2 SQL或隔离存储中的文件,该文件由互斥体保护。对于 前台应用程序写入和 代理仅读取,建议使用具有 互斥。我们建议您不要使用隔离存储设置来 在进程之间进行通信,因为数据可以 腐败
  • 隔离存储中的一个简单文件应该可以完成这项工作。

    关于“Linq 2 Sql”部分,我想知道当您使用Sqlite时,它是否适用于其他库中的Linq支持?