2016-07-27 86 views
2

我認爲標題是自我解釋的:例如,我每天都在努力發起後臺任務。該任務使用TimeTrigger正確註冊,添加到Manifest中,但結果各不相同,有時只會在手機上觸發,有時只在PC上觸發,而不會觸發。如何在UWP的後臺每天午夜運行一些代碼?

請告訴我什麼是這樣做的正確方法。除了這個,我在我的應用程序中完成了一切

在此先感謝。

編輯:我現在做的方式是使用2個後臺任務:每個人使用TimeTrigger,第一個設置爲在午夜運行一次,唯一的用途是計劃第二個每24小時運行一次。但正如我剛纔所說,它沒有按預期工作。

回答

2

OS可以取消/終止後臺任務有或沒有通知。 例如...如果您註冊了一個15分鐘的內置bgtask並執行任務取消,您可能會在一天內看到該任務被取消多次。

我的建議是...嘗試運行bgtask幾次「午夜」內要解決的任務取消。

  1. 實現你的bgtask取消。
  2. 以1小時的間隔註冊您的任務。
  3. 在任務開始時,檢查時間和標記,如果時間是'午夜'且標記未設置,則執行任務。
  4. 在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(); 
     } 

    } 
+0

感謝隊友!即使我生氣了,開發人員無法在特定的時間安排後臺任務,就像官方的鬧鐘應用一樣簡單,我接受了你的回答。我不記得有一次警報被取消。微軟應該給予開發者更多的權力。這是一個恥辱。再次感謝。我會嘗試你的想法幾天,看看。 –

-2

有多少變化?

我首先想到的是插入一個計時器,每1/5分鐘檢查時間,如果它是0:00執行一個函數。 當然,您應該先將計時器與「當前時間控制」在啓動..

但僅僅是最初的想法,我有..