C# 我可以为UWP的背景任务设置多个触发器吗?

C# 我可以为UWP的背景任务设置多个触发器吗?,c#,.net,uwp,windows-10,background-task,C#,.net,Uwp,Windows 10,Background Task,如果我只能使用SetTrigger方法将一个触发器设置为后台任务或多个触发器,则在MSDN文档中找不到。如果我想在计时器上触发任务,并且以编程方式触发,因此需要TimerRigger和ApplicationRigger,该怎么办?还可以使用AddCondition设置多个条件吗?后台任务注册只能有一个触发器,但可以对同一后台任务进行多个注册 你可以有你想要的任何条件 例如,在这里,当Internet连接可用时,MyBackgroundTask由TimeTrigger和UserPresent触发器

如果我只能使用SetTrigger方法将一个触发器设置为后台任务或多个触发器,则在MSDN文档中找不到。如果我想在计时器上触发任务,并且以编程方式触发,因此需要TimerRigger和ApplicationRigger,该怎么办?还可以使用AddCondition设置多个条件吗?

后台任务注册只能有一个触发器,但可以对同一后台任务进行多个注册

你可以有你想要的任何条件

例如,在这里,当Internet连接可用时,MyBackgroundTask由TimeTrigger和UserPresent触发器触发。在这两种情况下都将调用MyBackgroundTask.Run

public sealed class MyBackgroundTask : IBackgroundTask
{
    public void Run(IBackgroundTaskInstance taskInstance)
    {
        // your task code here
    }

    public void Register()
    {
         RegisterWithTrigger(BackgroundTaskSuffixTime,          new TimeTrigger((uint) RefreshInterval.TotalMinutes, false));
         RegisterWithTrigger(BackgroundTaskSuffixUserPresent,   new SystemTrigger(SystemTriggerType.UserPresent, false));
    }

    private static IBackgroundTaskRegistration RegisterWithTrigger(string taskSuffix, IBackgroundTrigger trigger)
    {
        var taskEntryPoint  = typeof(MyBackgroundTask).FullName;
        var taskName        = taskEntryPoint + taskSuffix;

        var registration            = BackgroundTaskRegistration.AllTasks.Select(x => x.Value).FirstOrDefault(x => x.Name == taskName);
        if(registration != null) return registration;

        var taskBuilder             = new BackgroundTaskBuilder();
        taskBuilder.Name            = taskName;
        taskBuilder.TaskEntryPoint  = taskEntryPoint;
        taskBuilder.SetTrigger(trigger);
        taskBuilder.AddCondition(new SystemCondition(SystemConditionType.InternetAvailable));
        return taskBuilder.Register();
    }
}
不要忘记在应用程序清单中声明所有适当的触发器:

<Extension Category="windows.backgroundTasks" EntryPoint="Background.MyBackgroundTask">
  <BackgroundTasks>
    <Task Type="systemEvent" />
    <Task Type="timer" />
  </BackgroundTasks>
</Extension>

后台任务注册只能有一个触发器,但对于同一后台任务,可以有多个注册

你可以有你想要的任何条件

例如,在这里,当Internet连接可用时,MyBackgroundTask由TimeTrigger和UserPresent触发器触发。在这两种情况下都将调用MyBackgroundTask.Run

public sealed class MyBackgroundTask : IBackgroundTask
{
    public void Run(IBackgroundTaskInstance taskInstance)
    {
        // your task code here
    }

    public void Register()
    {
         RegisterWithTrigger(BackgroundTaskSuffixTime,          new TimeTrigger((uint) RefreshInterval.TotalMinutes, false));
         RegisterWithTrigger(BackgroundTaskSuffixUserPresent,   new SystemTrigger(SystemTriggerType.UserPresent, false));
    }

    private static IBackgroundTaskRegistration RegisterWithTrigger(string taskSuffix, IBackgroundTrigger trigger)
    {
        var taskEntryPoint  = typeof(MyBackgroundTask).FullName;
        var taskName        = taskEntryPoint + taskSuffix;

        var registration            = BackgroundTaskRegistration.AllTasks.Select(x => x.Value).FirstOrDefault(x => x.Name == taskName);
        if(registration != null) return registration;

        var taskBuilder             = new BackgroundTaskBuilder();
        taskBuilder.Name            = taskName;
        taskBuilder.TaskEntryPoint  = taskEntryPoint;
        taskBuilder.SetTrigger(trigger);
        taskBuilder.AddCondition(new SystemCondition(SystemConditionType.InternetAvailable));
        return taskBuilder.Register();
    }
}
不要忘记在应用程序清单中声明所有适当的触发器:

<Extension Category="windows.backgroundTasks" EntryPoint="Background.MyBackgroundTask">
  <BackgroundTasks>
    <Task Type="systemEvent" />
    <Task Type="timer" />
  </BackgroundTasks>
</Extension>

您可以对同一后台任务进行多次注册同一后台任务由同一taskEntryPoint或taskName定义?您可以对同一后台任务进行多次注册同一后台任务由同一taskEntryPoint或taskName定义?