运行 特定时间的后台任务 - UWP

Run Background Task at specific time - UWP

我在不知不觉中问过这个问题..但我无法得到直接答案,也无法在 google 上找到合适的答案。

我想每天向用户发送一次Toast Notification,如果满足一些要求,否则第二天检查。我有一个要检查的 SQLite 数据库。 我有一个应该工作的后台任务,但它会在我启动应用程序后立即检查,但再也不会。它也很难调试它。:/

我有这个:

 public async void RegisterBackgroundTask()
    {
        var tommorowMidnight = DateTime.Today.AddDays(1);
        var timeTilMidnight = tommorowMidnight - DateTime.Now;
        var minutesTilMidnight = (uint)timeTilMidnight.TotalMinutes;

        var task = RegisterBackgroundTask("TaskBuilder",
                                          "TimeTriggeredTask",
                                          new TimeTrigger(15, false), //new TimeTrigger(minutesTilMidnight, false),
                                          null);
        await task;
                CheckPremieres(); //My method that i want to check only once a day at 00:00


    }

我也试过这个:

 public async void RegisterBackgroundTask()
    {
        var tommorowMidnight = DateTime.Today.AddDays(1);
        var timeTilMidnight = tommorowMidnight - DateTime.Now;
        var minutesTilMidnight = (uint)timeTilMidnight.TotalMinutes;

        var task = RegisterBackgroundTask("TaskBuilder",
                                          "TimeTriggeredTask",
                                          new TimeTrigger(15, false), //new TimeTrigger(minutesTilMidnight, false),
                                          null);
        await task.ContinueWith((x) =>
            {
                CheckPremieres(); //My method that i want to check only once a day at 00:00
            });

    }

15分钟只是为了测试,注释掉的才是真正的代码。

我的问题是这不能像现在这样工作,因为正如我所说它只检查一次..然后当程序 运行ning 时什么也没有,当程序被置于后台时什么也没有。 .我做错了什么??

上面的方法与 RegisterBackgroundTask 方法一起在我的 notificationhandler class 中。然后我有一个任务生成器 class.. 但那个是来自 MS GitHub例子..

你们还需​​要其他信息来帮助我吗??我想我很快就会 bash 我的头出现在屏幕上...!

编辑: 我是否误解了整个事情..是在 运行 中的 TaskBuilder class 我应该 运行 我的方法吗??

我将不胜感激..

将类似这样的内容添加到您的后台任务中:

var task = RegisterBackgroundTask("TaskBuilder",
                                      "TimeTriggeredTask",
                                      TimeTrigger(1440, true),//1440 for the number of minutes in a day
                                      null);

你注释掉的代码应该会导致后台任务在午夜触发,你说你已经测试成功了。从那里您需要注册后台任务以每 24 小时重新发生一次。时间触发器的第二个参数表示它是否应该重复。

在 运行 之前仔细检查该任务是否未安排在后台任务中,您应该可以开始了。