2016-01-30 4 views
4

Я пытаюсь запустить фоновое задание, когда я вхожу в мое устройство сразу после его включения. Прямо сейчас он запускается только после того, как я уже был зарегистрирован и снова зашел в систему.Запуск фоновой задачи при запуске

Я вижу, что задача отлично отлажена при отладке, но до сих пор не знает, почему она не работает при запуске.

async void RequestBackgroundAccess() 
{ 
    BackgroundAccessStatus backgroundStatus = await BackgroundExecutionManager.RequestAccessAsync(); 

    if (backgroundStatus != BackgroundAccessStatus.Denied && backgroundStatus != BackgroundAccessStatus.Unspecified) 
    { 
     RegisterBackgroundThread(); 
    } 
    else 
    { 
     Debug.WriteLine("[Background Access] Denied."); 
    } 
} 

void RegisterBackgroundThread() 
{ 
    var taskRegistered = false; 
    var exampleTaskName = "Bot"; 

    foreach (var bgTask in BackgroundTaskRegistration.AllTasks) 
    { 
     if (bgTask.Value.Name == exampleTaskName) 
     { 
      taskRegistered = true; 
      Debug.WriteLine("[Background Task] Registered."); 
      break; 
     } 
    } 

    if (taskRegistered == false) 
    { 
     Debug.WriteLine("[Background Task] Registering..."); 

     var builder = new BackgroundTaskBuilder(); 

     builder.Name = exampleTaskName; 
     builder.TaskEntryPoint = "Tasks.Bot"; 
     builder.SetTrigger(new SystemTrigger(SystemTriggerType.UserPresent, false)); 

     BackgroundTaskRegistration task = builder.Register(); 
     Debug.WriteLine("[Background Task] Registered."); 
    } 
} 

Bot.cs

namespace Tasks 
{ 
    public sealed class Bot : IBackgroundTask 
    { 
     BackgroundTaskDeferral serviceDeferral; 

     public void Run(IBackgroundTaskInstance taskInstance) 
     { 
      this.serviceDeferral = taskInstance.GetDeferral(); 
      ToastNotification("Starting..."); 
     } 

     void ToastNotification(String message) 
     { 
      XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText01); 

      XmlNodeList stringElements = toastXml.GetElementsByTagName("text"); 
      stringElements[0].AppendChild(toastXml.CreateTextNode(message)); 

      ToastNotification toast = new ToastNotification(toastXml); 
      ToastNotificationManager.CreateToastNotifier().Show(toast); 
     } 
    } 
} 
+0

Если вы добавляете условие в свой построитель задач, получаете ли вы тот же результат? 'builder.AddCondition (новый SystemCondition (SystemConditionType.SessionConnected));' – Chase

+0

@Chase Nope не работает :( – Kenny

+0

Просто проверка: Является ли 'Tasks.Bot' полное имя вашей задачи, на которой выполняется фоновый процесс? – Chase

ответ

0

Пожалуйста, обратитесь на этот вопрос .. Я считаю, что это так связано с вашими:

Uwp execute backgroundtask at user login

Удачи!

+1

Спасибо , это то же самое, что со мной происходит. Вчера я незарегистрировал фоновое задание и зарегистрировал его снова, он решил проблему! Никаких изменений кода. – Kenny

+1

Я рад, что ваша проблема решена, если вы видите мой ответ на 100% точный ответ, пожалуйста, примите это :) –

+0

Конечно, извините! – Kenny

1

Я незарегистрировал фоновое задание и зарегистрировал его снова, он решил проблему, которую я имел.

Смежные вопросы