Я не могу найти в документации MSDN, если я могу установить только один триггер (с помощью метода SetTrigger()) в фоновое задание или несколько. Что делать, если я хочу запускать задачу по таймеру, а также программно, и поэтому мне нужны TimerTrigger и ApplicationTrigger? Также возможно установить несколько условий с помощью AddCondition()?Могу ли я установить более одного триггера для BackgroundTask UWP?
1
A
ответ
3
Регистрация фоновой задачи может содержать только один триггер, но вы можете иметь несколько регистраций для одной и той же фоновой задачи.
У вас может быть столько условий, сколько вы хотите.
Например, здесь 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