1
我無法在MSDN文檔中找到我是否只能將一個觸發器(使用SetTrigger()方法)設置爲後臺任務或多個觸發器。如果我想在計時器上以編程方式觸發任務,那麼我需要TimerTrigger和ApplicationTrigger?還有可能使用AddCondition()設置多個條件?我可以爲UWP的BackgroundTask設置多個觸發器嗎?
我無法在MSDN文檔中找到我是否只能將一個觸發器(使用SetTrigger()方法)設置爲後臺任務或多個觸發器。如果我想在計時器上以編程方式觸發任務,那麼我需要TimerTrigger和ApplicationTrigger?還有可能使用AddCondition()設置多個條件?我可以爲UWP的BackgroundTask設置多個觸發器嗎?
後臺任務註冊只能有一個觸發器,但您可以爲同一個後臺任務進行多次註冊。
您可以擁有任意數量的條件。
例如,在互聯網連接可用時,此處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? – nmrlqa4
這是相同的入口點,但不同的任務名稱。 – Vincent