gpt4 book ai didi

c# - 如何在 UWP 中每天午夜在后台运行一些代码?

转载 作者:太空狗 更新时间:2023-10-30 01:32:00 26 4
gpt4 key购买 nike

我认为标题是不言自明的:我每天都在努力启动后台任务,例如在午夜。任务使用 TimeTrigger 正确注册,添加到 Manifest 但结果各不相同,有时它仅在手机上触发,有时仅在 PC 上触发,有时根本不会触发。

请告诉我正确的做法是什么。除了这个,我完成了应用程序中的所有内容。

提前致谢。

编辑:我现在的做法是使用 2 个后台任务:每个都使用一个 TimeTrigger,第一个设置为在午夜运行一次,它的唯一用途是安排第二个每 24 小时运行一次。但正如我之前所说,它没有按预期工作。

最佳答案

操作系统可以在有或没有通知的情况下取消/终止后台任务。例如...如果您注册一个 15 分钟间隔的 bgtask 并实现任务取消,您可能会看到该任务在一天内被取消了几次。

我的建议是......尝试在“午夜”内多次运行 bgtask 以解决任务取消问题。

  1. 在您的 bgtask 中实现取消。
  2. 以 1 小时的间隔注册您的任务。
  3. 在任务开始时,检查时间和标志,如果时间是“午夜”且未设置标志,则执行任务。
  4. 在本地设置中设置“完成”标志。

后台取消的详细信息在这里。 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();
}

}

关于c# - 如何在 UWP 中每天午夜在后台运行一些代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38623831/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com