我有一个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;
}
我的代码每十五分钟运行一次,我希望它只运行三次。
答案 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;