gpt4 book ai didi

c# - 我可以为 UWP 的 BackgroundTask 设置多个触发器吗?

转载 作者:太空宇宙 更新时间:2023-11-03 19:49:49 45 4
gpt4 key购买 nike

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

最佳答案

一个后台任务注册只能有一个触发器,但是,您可以为同一个后台任务注册多个。

您可以根据需要设置任意多个条件。

例如,在这里,MyBackgroundTaskTimeTrigger 触发,而 UserPresent 在 Internet 连接可用时触发。 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();
}
}

不要忘记在应用程序 list 中声明所有适当的触发器:

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

关于c# - 我可以为 UWP 的 BackgroundTask 设置多个触发器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40996136/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com