OSは、通知の有無に関わらず、バックグラウンドタスクを終了する/キャンセルすることができます。 例... 15分間隔のbgtaskを登録してタスクキャンセルを実装すると、タスクが1日以内に数回キャンセルされることがあります。
私のお勧めは...「midnight」内で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();
}
}
thanks mate!私はあなたが正式なアラームアプリが行うのと同じくらい簡単に特定の時間にバックグラウンドタスクをスケジュールすることができないことを怒っていても答えました。そして、私はアラームがキャンセルされる1回を覚えていません。マイクロソフトは実際に開発者にもっと力を与える必要があります。それは残念だ。再度、感謝します。私はあなたの考えを数日間試してみるつもりです。 –