OS可以取消/終止後臺任務有或沒有通知。 例如...如果您註冊了一個15分鐘的內置bgtask並執行任務取消,您可能會在一天內看到該任務被取消多次。
我的建議是...嘗試運行bgtask幾次「午夜」內要解決的任務取消。
- 實現你的bgtask取消。
- 以1小時的間隔註冊您的任務。
- 在任務開始時,檢查時間和標記,如果時間是'午夜'且標記未設置,則執行任務。
- 在localsettings處設置'done'標誌。背景抵消的
細節在這裏。 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();
}
}
感謝隊友!即使我生氣了,開發人員無法在特定的時間安排後臺任務,就像官方的鬧鐘應用一樣簡單,我接受了你的回答。我不記得有一次警報被取消。微軟應該給予開發者更多的權力。這是一個恥辱。再次感謝。我會嘗試你的想法幾天,看看。 –