2016-07-27 88 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执行一个函数。 当然,您应该先将计时器与“当前时间控制”在启动..

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