[英]How to run some code every day at midnight in background in UWP?
我認為標題是不言自明的:例如,我每天都在午夜時分執行后台任務。 任務已使用TimeTrigger正確注冊,已添加到清單中,但結果有所不同,有時僅在電話上觸發,有時僅在PC上觸發,有時則完全不觸發。
請告訴我正確的做法是什么。 除此以外,我已完成應用程序中的所有操作。
提前致謝。
編輯:我現在做的方式是使用2個后台任務:每個任務都使用一個TimeTrigger,第一個任務設置為在午夜運行一次,它的唯一用途是安排第二個任務每24小時運行一次。 但是,正如我之前所說,它不能按預期方式工作。
操作系統可以取消/終止帶有或不帶通知的后台任務。 例如,...如果您注冊了一個間隔為15分鍾的bgtask並實施了任務取消,則可能會看到該任務在一天內被多次取消。
我的建議是...嘗試在“午夜”內多次運行bgtask,以解決任務取消的問題。
取消背景的詳細信息在這里。 https://msdn.microsoft.com/zh-CN/windows/uwp/launch-resume/handle-a-cancelled-background-task
我的答案可能會幫助您Timetrigger不觸發后台任務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();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.