如何重复后台任务计时器?

时间:2014-07-24 01:02:16

标签: windows-phone windows-phone-8.1

我有一个Windows Phone项目。我想运行三次后台任务,并在运行三次后自动取消注册。

我的代码:

var taskRegisted = false;
var exampleTaskName = "TimerRegister";

foreach (var task in BackgroundTaskRegistration.AllTasks)
{
   if (task.Value.Name == exampleTaskName)
   {
      taskRegisted = true;
      break;
   }
}

if (taskRegisted == false)
{
   var builder = new BackgroundTaskBuilder();
   //var trigger = new SystemTrigger(SystemTriggerType.TimeZoneChange, false);
   var trigger = new TimeTrigger(15, false);

   builder.Name = exampleTaskName;
   builder.TaskEntryPoint = typeof(ToastTask).FullName;
   builder.SetTrigger(trigger);

   var taskRegistion = builder.Register();

   taskRegistion.Completed += taskRegistion_Completed;
}

我的代码每十五分钟运行一次,我希望它只运行三次。

2 个答案:

答案 0 :(得分:0)

遗憾的是,不能以您描述的方式限制后台任务的运行次数。 TimeTrigger确实拥有' OneShot'属性允许您只运行一次任务,但不能将其配置为运行X次,无论是1次还是无限次。

我的建议是跟踪您的任务运行次数。只需使用任务运行的次数写入隔离存储中的文件,然后在任务启动时检查该值。执行此操作后,如果您已经运行了3次退出Run()方法,而没有做任何真正的工作,那就

答案 1 :(得分:0)

在Run方法(BackgroundTask' s)中取消注册 BackgroundTask 的方法没有任何意义。例如,下面的代码应运行三次,然后取消注册:

// code in Run method:
int nrPreviousRuns = 0;
var settings = ApplicationData.Current.LocalSettings;
if (settings.Values.ContainsKey("numberOfRuns")) nrPreviousRuns = (int)settings.Values["numberOfRuns"];
if (nrPreviousRuns >= 3) // maksimum number of runs
{
    // unregister the task
    foreach (var cur in BackgroundTaskRegistration.AllTasks)
        if (cur.Value.Name == "yourBGTaskName") cur.Value.Unregister(true);
    settings.Values.Remove("numberOfRuns");
}
else settings.Values["numberOfRuns"] = ++nrPreviousRuns;