2016-11-03 16 views
0

Я разрабатываю приложение UWP, и мне нужно отправить свое местоположение каждые 15 секунд, если текущее состояние приложения активно или приостановлено. Я попробовал два различных подхода:UWP - Фоновая задача - короткий интервал

await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() => 
     { 
      await UpdateMethod(data); 
     }); 

и

var taskResult = await backgroundTrigger.RequestAsync(taskParameters); 
  1. ExtendedExecution

    • отлично работает, когда приложение активно
    • , когда приложение приостановлено грузоотправитель не доступен
  2. ExtendedExecution + Фоновая Задача + Применение Trigger

    • он отлично работает, когда приложение активно
    • , когда приложение приостановлено я получаю ApplicationTriggerResult.DisabledByPolicy после вызова метода выше

ответ

1

, когда приложение приостановлено Диспетчер недоступен

Я проверил официальный образец ExtendedExecution на моей стороне, Dispatcher работал хорошо после приостановки приложения, если ExtendedExecutionSession было предложено успешно. Моя среда - это Windows 10 build 14393, и я тестировал эту функцию на ПК-устройстве.

Мне нужно отправить свое местоположение каждые 15 сек

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

, когда приложение приостановлено я получаю ApplicationTriggerResult.DisabledByPolicy после вызова метода выше

Согласно официальному образцу, ExtendExcution уже соответствуют вашим требованиям. Для application trigger, насколько я знаю, он не может быть запрошен из потока пользовательского интерфейса.

Кроме того, ExtendExcution может поддерживать ваше приложение в течение 10 минут после приостановки операции, если для устройства не подключено питание. Более подробно просьба обращаться к this video.

+0

'частная асинхронная недействительная синхронизации (объект синхронизация) { вара данные = синхронизация в виде строки; если (данные! = NULL) { ждет CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync (CoreDispatcherPriority.Normal, асинхронный() => { ждет _dl.UpdateLocation (данные); // точка останова на этой строке никогда не попадает }); } ' Пробовал на 2 таблетки, ПК (10586 и 14393), и это не работает. Я использую ExtendedExecutionReason.LocationTracking. – lijevosmetalo

+0

@ lijevosmetalo Я проверил официальный образец на 14393, он действительно работает. Также проверьте тестовый сценарий 3 и следуйте официальным образцам, чтобы исправить ваш код. Я не могу решить проблему только одной строкой кода. Если у вас все еще есть проблемы, загрузите весь проект размножения, чтобы мы могли вам помочь. –

+0

Оффициальный образец не работает для меня. Попробуйте Сценарий 3 и положите точку останова на строку 140 (или любую строку, которая находится между 140 и 159). Запустите сценарий, а затем приостановите приложение из VS. Сценарий 1, который не использует Dispatcher в методе OnTimer, отлично работает, а сценарий 3 - нет. – lijevosmetalo

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

  • Нет связанных вопросов^_^