我认为标题是自我解释的:例如,我每天都在午夜努力解雇背景任务。使用TimeTrigger正确注册任务,添加到Manifest但结果各不相同,有时它仅在手机上触发,有时仅在PC上触发,其他任何时候都没有。
请告诉我这样做的正确方法。除了这个,我在我的应用程序中完成了所有内容。
提前致谢。
编辑:我现在的方式是使用2个后台任务:每个任务使用一个TimeTrigger,第一个设置为在午夜运行一次,其唯一用途是安排第二个每24小时运行一次。但正如我之前所说,它并没有按预期工作。
答案 0 :(得分:3)
操作系统可以取消/终止后台任务WITH或不通知。 例如......如果您注册15分钟的bgtask并执行任务取消,您可能会在一天内看到该任务被多次取消。
我的建议是......尝试在“午夜”内多次运行bgtask以解决任务取消问题。
背景取消的详细信息在这里。 https://msdn.microsoft.com/en-us/windows/uwp/launch-resume/handle-a-cancelled-background-task
这个我的回答可能对你有所帮助 Timetrigger not firing backgroundtask UWP
这是我对bgtask的实现。它支持取消。
public async void Run(IBackgroundTaskInstance taskInstance)
{
string dbgout = "";
var startTime = DateTime.Now;
dbgout += "BgTask ";
var cost = BackgroundWorkCost.CurrentBackgroundWorkCost;
var cancel = new System.Threading.CancellationTokenSource();
taskInstance.Canceled += (s, e) =>
{
dumpLog("Canceled.");
cancel.Cancel();
cancel.Dispose();
};
try
{
_deferral = taskInstance.GetDeferral();
dbgout += cost.ToString() + " ";
switch (cost)
{
case BackgroundWorkCostValue.Low:
case BackgroundWorkCostValue.Medium:
await TimeConsumedTaskLowMidAsync().AsTask(cancel.Token);
break;
case BackgroundWorkCostValue.High:
await TimeConsumedTaskHighAsync().AsTask(cancel.Token);
break;
default:
break;
}
}
catch (Exception e)
{
dbgout += ("Failed " + e.Message + "...");
}
finally
{
dumpLog(dbgout + " " + (DateTime.Now - startTime).TotalSeconds.ToString("F1"));
_deferral.Complete();
}
}