背景任务没有';不要开火

本文关键字:开火 任务 背景 | 更新日期: 2023-09-27 18:29:05

我的后台任务注册但从不启动。我尝试删除整个项目以删除所有任务,更改了TaskBuilder类的名称,并使用了不同的条件。但似乎什么都不起作用。我有时会收到一个错误,说它不能向我显示错误。

我在这里构建它:

public async void RegisterBackgroundTask()
{
    var taskRegistered = false;
    var TaskName = "TimeTriggeredTask";
    foreach (var task in BackgroundTaskRegistration.AllTasks)
    {
        if (task.Value.Name == TaskName)
        {
            taskRegistered = true;
            break;
        }
    }
    var tommorowMidnight = DateTime.Today.AddDays(1);
    var timeTilMidnight = tommorowMidnight - DateTime.Now;
    var minutesTilMidnight = (uint)timeTilMidnight.TotalMinutes;
    if (!taskRegistered)
    {
        var task = RegisterBackgroundTask("TaskBuilderClass",
                                          "TimeTriggeredTask",
                                           new TimeTrigger(minutesTilMidnight, false),
                                           new SystemCondition(SystemConditionType.InternetAvailable));
        await task;
        CheckPremieres();
    }
}

生成器方法:

public static async Task<BackgroundTaskRegistration> RegisterBackgroundTask(String taskEntryPoint, String name, IBackgroundTrigger trigger, IBackgroundCondition condition)
{
    await BackgroundExecutionManager.RequestAccessAsync();
    var builder = new BackgroundTaskBuilder();
    builder.Name = name;
    builder.TaskEntryPoint = taskEntryPoint;
    builder.SetTrigger(trigger);
    builder.AddCondition(condition);
    BackgroundTaskRegistration task = builder.Register();
    //
    // Remove previous completion status from local settings.
    //
    var settings = ApplicationData.Current.LocalSettings;
    settings.Values.Remove(name);
    return task;
}

这是我也添加到清单中的任务构建器类:

public sealed class TaskBuilderClass : IBackgroundTask
{
    //
    // The Run method is the entry point of a background task.
    //
    public void Run(IBackgroundTaskInstance taskInstance)
    {            
        //
        // Query BackgroundWorkCost
        // Guidance: If BackgroundWorkCost is high, then perform only the minimum amount
        // of work in the background task and return immediately.
        //
        var cost = BackgroundWorkCost.CurrentBackgroundWorkCost;
        var settings = ApplicationData.Current.LocalSettings;
        settings.Values["BackgroundWorkCost"] = cost.ToString();
        App.nHandler.CheckPremieres();
    }   
}

背景任务没有';不要开火

我很确定任务需要在它自己的Windows运行时组件中;我一直都是这样做的。GitHub上的Microsoft示例在一个单独的项目中也有这些任务。

试着这样做。不要忘记引用应用程序中新创建的项目。这是我最常忘记的事情。

完成此操作后,我还建议您首先从Visual Studio的"调试位置"工具栏触发该任务,以确保一切配置正确。它应该出现在下拉列表中,并且应该在此处正确工作,否则它也无法按计划工作。