簡體   English   中英

如何在UWP中每天午夜在后台運行一些代碼?

[英]How to run some code every day at midnight in background in UWP?

我認為標題是不言自明的:例如,我每天都在午夜時分執行后台任務。 任務已使用TimeTrigger正確注冊,已添加到清單中,但結果有所不同,有時僅在電話上觸發,有時僅在PC上觸發,有時則完全不觸發。

請告訴我正確的做法是什么。 除此以外,我已完成應用程序中的所有操作。

提前致謝。

編輯:我現在做的方式是使用2個后台任務:每個任務都使用一個TimeTrigger,第一個任務設置為在午夜運行一次,它的唯一用途是安排第二個任務每24小時運行一次。 但是,正如我之前所說,它不能按預期方式工作。

操作系統可以取消/終止帶有或不帶通知的后台任務。 例如,...如果您注冊了一個間隔為15分鍾的bgtask並實施了任務取消,則可能會看到該任務在一天內被多次取消。

我的建議是...嘗試在“午夜”內多次運行bgtask,以解決任務取消的問題。

  1. 在您的bgtask中實施取消。
  2. 每隔1小時注冊一次任務。
  3. 在任務開始時,檢查時間和標志,如果時間是“午夜”並且未設置標志,則執行任務。
  4. 在localsettings設置“完成”標志。

取消背景的詳細信息在這里。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM