Я пытаюсь настроить фоновое задание для запуска каждые 15 минут с моего приложения UWP, но, несмотря на успешное регистрацию приложения, он не запускается , Там есть тонны материала, чтобы быстро подвести итог тому, что я сделал до сих пор:Фоновая задача в UWP - TimeTrigger и SystemTrigger регистрируют нулевое значение в builder.SetTrigger
- Создан компонент компонента Windows Runtime Component.
- Добавлен BackgroundSync.cs, реализующий
IBackgroundTask
. - Ссылка на проект WinRT из моего проекта пользовательского интерфейса.
- Зарегистрированная фоновая задача в пакете .appmanifest, включая отметки триггеров событий Timer и System.
- Registered BackgroundSync в App.xaml.cs, код ниже.
- Проверено, что BackgroundSync является зарегистрированной фоновой задачей в Powershell.
- Я вручную вызвал задачу BackgroundSync в отладке> События жизненного цикла.
Вот мой код, чтобы зарегистрировать задачу:
private static async Task<BackgroundTaskRegistration> SetupBackgroundSync()
{
await BackgroundExecutionManager.RequestAccessAsync();
var builder = new BackgroundTaskBuilder();
var TaskName = "BackgroundSync";
foreach (var t in BackgroundTaskRegistration.AllTasks)
{
if (t.Value.Name == TaskName)
{
t.Value.Unregister(true);
}
}
builder.Name = TaskName;
builder.TaskEntryPoint = typeof(Background.BackgroundSync).FullName;
builder.AddCondition(new SystemCondition(SystemConditionType.InternetAvailable));
builder.SetTrigger(new TimeTrigger(15, false));
BackgroundTaskRegistration task = builder.Register();
return task;
}
Единственная проблема, которую я могу определить, является то, что на создание BackgroundTaskRegistration
объекта я могу видеть, что триггер является недействительным. Это показывает нулевой и триггерный тип, отличный от ApplicationTrigger
.
Я видел сообщение here, в котором принимается плакат, ответ которого утверждается, что это нулевое отображение в объекте задачи ожидается, однако предлагаемое решение не помогло.
Стоит также заявить, что при запуске RequestAccessAsync()
значение, которое я возвращаю, фактически составляет BackgroundAccessStatus.AllowedSubjectToSystemPolicy
, которое, как я считаю, должно иметь последствия. Я видел в некоторых местах, что RequestAccessAsync()
должен вызываться из потока пользовательского интерфейса, и я вызываю это из App.xaml.cs, прежде чем регистрировать свои задачи.
Есть ли у кого-нибудь другие идеи о потенциальных причинах этого?
Update 07-10
код в моем тестовом проекте для этого фона вопрос задачи:
RegistrationHelper.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.ApplicationModel.Background;
namespace Tasks
{
public sealed class RegistrationHelper
{
public async Task<BackgroundTaskRegistration> RegisterTasks()
{
//Returns AllowedSubjectToSystemPolicy
await BackgroundExecutionManager.RequestAccessAsync();
var builder = new BackgroundTaskBuilder();
var TaskName = "BackgroundTask1";
foreach (var t in BackgroundTaskRegistration.AllTasks)
{
if (t.Value.Name == TaskName)
{
t.Value.Unregister(true);
}
}
builder.Name = TaskName;
builder.TaskEntryPoint = typeof(BackgroundTask1).FullName;
builder.AddCondition(new SystemCondition(SystemConditionType.InternetAvailable));
builder.SetTrigger(new TimeTrigger(15, false));
BackgroundTaskRegistration task = builder.Register();
return task;
}
}
}
Вызывается в моем App.xaml.cs здесь.
public App()
{
this.InitializeComponent();
this.Suspending += OnSuspending;
Tasks.RegistrationHelper registrationhelper = new Tasks.RegistrationHelper();
var task = registrationhelper.RegisterTasks();
}
Мой фон задача: структура
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.ApplicationModel.Background;
namespace Tasks
{
public sealed class BackgroundTask1 : IBackgroundTask
{
public void Run(IBackgroundTaskInstance taskInstance)
{
while (true) { }
}
}
}
Solution. BackgroundTaskTest - это приложение UWP Blank.Задачи являются UWP среды выполнения Windows Компонент:
И, наконец, мой PackageManifest:
<Extensions>
<Extension Category="windows.backgroundTasks" EntryPoint="Tasks.BackgroundTask1">
<BackgroundTasks>
<Task Type="systemEvent" />
<Task Type="timer" />
</BackgroundTasks>
</Extension>
</Extensions>
Я собирался опубликовать тот же вопрос. Мой TimeTrigger также отлично зарекомендовал себя, но не срабатывает. Ждем ответа. – AVK
Пальцы скрещены ... Ваш триггер также отображается как нулевой в вашем отладчике? – JonnyKnottsvill
да. Его либо мы что-то упускаем в документации, либо документация не обновлена или не хватает нескольких шагов. – AVK