2016-12-06 38 views
1

我無法在MSDN文檔中找到我是否只能將一個觸發器(使用SetTrigger()方法)設置爲後臺任務或多個觸發器。如果我想在計時器上以編程方式觸發任務,那麼我需要TimerTrigger和ApplicationTrigger?還有可能使用AddCondition()設置多個條件?我可以爲UWP的BackgroundTask設置多個觸發器嗎?

回答

3

後臺任務註冊只能有一個觸發器,但您可以爲同一個後臺任務進行多次註冊。

您可以擁有任意數量的條件。

例如,在互聯網連接可用時,此處MyBackgroundTask由觸發器TimeTriggerUserPresent觸發。兩種情況下都會調用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> 
+0

「你可以有相同的背景任務數登記」同樣的後臺任務是由同一taskEntryPoint定義 或taskName? – nmrlqa4

+0

這是相同的入口點,但不同的任務名稱。 – Vincent

相關問題