2016-02-18 4 views
0

Как запустить несколько экземпляров одной и той же фоновой задачи в UWP-приложении?Несколько экземпляров фоновой задачи

зарегистрировать его как в этом учебнике: https://msdn.microsoft.com/en-us/library/windows/apps/mt299100.aspx?f=255&MSPPError=-2147217396

Первый раз, когда я это работает, но когда я зарегистрировать вторую задачу с другим именем я получаю исключение:

System.Exception: Не для обработки этой команды доступно достаточно квоты. (Исключение из HRESULT: 0x80070718)

ответ

1

Ошибка, которую вы получаете, это general error, связанные с виртуальной памятью в системе.

После урока вы упоминался зарегистрировать каждую задачу только один раз, если вы не измените следующий шаг (первый шаг процесса регистрации):

var taskRegistered = false; 
var exampleTaskName = "ExampleBackgroundTask"; 

foreach (var task in BackgroundTaskRegistration.AllTasks) 
{ 
    if (task.Value.Name == exampleTaskName) 
    { 
     taskRegistered = true; 
     break; 
    } 
} 

Вся точка BackgroundTaskRegistration.AllTasks является перечислить все приложен годов зарегистрированные фоновые задачи.

Это означает, что задача может быть зарегистрирована один, два раза или столько, сколько вы хотите/нуждаетесь (хотя я не могу думать о каком-либо сценарии, в котором вы хотели бы этого сейчас).

Так что для того, чтобы зарегистрировать несколько экземпляров, все, что вам нужно сделать, это вызвать метод, как следующий по одному для каждого экземпляра вы хотите зарегистрировать:

private BackgroundTaskRegistration RegisterTask(
      Type taskType, 
      SystemTriggerType systemTriggerType, 
      SystemConditionType systemConditionType = SystemConditionType.Invalid) 
{ 
    var builder = new BackgroundTaskBuilder(); 

    /// A string identifier for the background task. 
    builder.Name = taskType.Name; 

    /// The entry point of the task. 
    /// This HAS to be the full name of the background task: {Namespace}.{Class name} 
    builder.TaskEntryPoint = taskType.FullName; 

    /// The specific trigger event that will fire the task on our application. 
    builder.SetTrigger(new SystemTrigger(systemTriggerType, false)); 

    /// A condition for the task to run. 
    /// If specified, after the event trigger is fired, the OS will wait for 
    /// the condition situation to happen before executing the task. 
    if (systemConditionType != SystemConditionType.Invalid) 
    { 
     builder.AddCondition(new SystemCondition(systemConditionType)); 
    } 

    /// Register the task and returns the registration output. 
    return builder.Register(); 
} 

Просто имейте в виду, что система или пользователь может запретить доступ к вашему приложению в фоновой системе задач при вызове метода BackgroundExecutionManager.RequestAccessAsync().

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

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