0

Я выполняю фоновое задание для своего приложения для Windows Store (приложение Win 8.1). Я написал очень простой тестовый класс, зарегистрировал его, запросил для доступа, но когда я решил отладить задачу с панели инструментов отладки, ничего не происходит. Я также ждал 15 минут несколько раз сегодня, и он ничего не выводит. Тем не менее, он показывает (с точки зрения кода), что задача зарегистрирована, и я не получаю никаких генерируемых исключений.Windows RT - фоновая задача не запускается

Предыстория Задача:

public sealed class BGFunMessage : IBackgroundTask 
    { 
     public void Run(IBackgroundTaskInstance taskInstance) 
     { 
      Debug.WriteLine("Background " + taskInstance.Task.Name + " Starting..."); 
     } 
    } 

Регистр Класс:

public class RegisterWorkers 
{ 
    public static async void Run() 
    { 
     var taskRegistered = false; 
     var taskName = "BGFunMessage"; 
     BackgroundTaskRegistration bTask = null; 

     foreach (var task in BackgroundTaskRegistration.AllTasks) 
     { 
      if (task.Value.Name == taskName) 
      { 
       //taskRegistered = true; 
       bTask = (BackgroundTaskRegistration)(task.Value); 
       bTask.Unregister(true); 
       break; 
      } 
     } 

     if (!taskRegistered) 
     { 
      string entryPoint = typeof(BGFunMessage).FullName; 

      bTask = RegisterBackgroundTask(entryPoint, taskName); 
     } 
    } 

    public static BackgroundTaskRegistration RegisterBackgroundTask(string taskEntryPoint, string name) 
    { 
     var builder = new BackgroundTaskBuilder(); 

     builder.Name = name; 
     builder.TaskEntryPoint = taskEntryPoint; 
     builder.SetTrigger(new TimeTrigger(15, false)); 

     BackgroundTaskRegistration task = null; 

     try 
     { 
      task = builder.Register(); 
     } 
     catch (Exception ex) 
     { 
      LiveLog.WriteException(ex, LogType.WARNING); 
     } 

     return task; 
    } 
} 

Как вызвать из страницы в моем приложении:

RegisterWorkers.Run(); 

Я попытался следующие нескольких учебных пособий , что все в основном говорят то же самое. Я также использую образцы MSDN, загруженные из GitHub, и я не вижу ничего на поверхности, что делает их код отличным от моего (кроме того, что их метод Register возвращает задачу <>). Я могу отлаживать исходные задачи проекта проекта, но не свой. Что-то я здесь делаю неправильно? Благодарю.

ответ

1

После многих часов устранения неполадок я нашел решение своей проблемы. Я не уверен, почему это так, но это работает. Первоначально (не указано выше) у меня была фоновая задача в том же проекте, что и в моем приложении. Единственная разница, которую я мог найти по всем направлениям, заключалась в том, что везде, где я видел, фоновые задачи выполнялись в проекте WINDOWS RUNTIME COMPONENT. Я вытащил свой код и включил его в свой проект и ссылался на .DLL, и теперь все работает нормально.

Следует отметить, что если кому-либо понадобится это исправление, теперь у меня больше нет доступа к каким-либо из моих данных или SyncContext от Azure Mobile Services, как он сейчас стоит. Я понятия не имею, что мне придется перепроектировать, чтобы заставить его работать сейчас, но проблема выше решена.

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

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