我认为这个标题是不言而喻的:我每天都在努力完成一个背景任务,比如在午夜。任务被正确地注册到一个TimeTrigger中,添加到清单中,但是结果不同,有时它只在电话上触发,有时只在PC上触发,有时根本不会触发。
请告诉我做这件事的正确方法是什么。我在我的应用程序中完成了除此之外的所有工作。
提前谢谢。
编辑:我现在的方法是使用两个后台任务:每个任务使用一个时间触发器,第一个任务设置为在午夜运行一次,它的唯一用途是将第二个任务安排为每24小时运行一次。但正如我之前所说,它并没有如预期的那样工作。

最佳答案

操作系统可以取消/终止后台任务,也可以不通知。
例如。。。如果您注册了一个15分钟的间隔bgtask并实现了任务取消,您可能会看到任务在一天内被多次取消。
我的建议是…尝试在“午夜”内多次运行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();
        }

    }

关于c# - 如何在UWP中每天午夜在后台运行一些代码?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38623831/

10-11 04:38