2015-05-24 9 views
8

Чтобы использовать приложение UWP на безголовой малине Pi 2 с ядром IOT Windows 10, мы можем использовать шаблон фонового приложения, который в основном создает новое приложение UWP только с фоновой задачей, которая выполняется при запуске:Windows 10 IOT Lifecycle (или: как свойство завершает фоновое приложение)

<Extensions> 
    <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundApplication1.StartupTask"> 
    <BackgroundTasks> 
     <iot:Task Type="startup" /> 
    </BackgroundTasks> 
    </Extension> 
</Extensions> 

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

public void Run(IBackgroundTaskInstance taskInstance) 
{ 
    BackgroundTaskDeferral Deferral = taskInstance.GetDeferral(); 

    //Execute arbitrary code here. 
} 

Таким образом, приложение продолжает работать и ОСА не будет убивать приложение после любого тайм-аута в вселенной IOT.

Пока что так здорово.

Однако: Я хочу, чтобы иметь возможность должным образом закрыть фоновое приложение, когда устройство выключается (или приложение просит «мягко» близко

В «нормальном» UWP приложения вы можете подписаться на рассылку. OnSuspending событие.
Как я могу получить уведомление о предстоящем завершении работы/закрытия в этом фоне сценария?

Помощь очень ценится.
Спасибо заранее!
-Simon

ответ

8

Вам необходимо обработать отмененное событие. Фоновая задача будет отменена, если устройство будет отключено правильно. Windows также отменяет задания, если они незарегистрированы.

BackgroundTaskDeferral _defferal; 
    public void Run(IBackgroundTaskInstance taskInstance) 
    { 
     _defferal = taskInstance.GetDeferral(); 
     taskInstance.Canceled += TaskInstance_Canceled; 
    } 

    private void TaskInstance_Canceled(IBackgroundTaskInstance sender, BackgroundTaskCancellationReason reason) 
    { 
     //a few reasons that you may be interested in. 
     switch (reason) 
     { 
      case BackgroundTaskCancellationReason.Abort: 
       //app unregistered background task (amoung other reasons). 
       break; 
      case BackgroundTaskCancellationReason.Terminating: 
       //system shutdown 
       break; 
      case BackgroundTaskCancellationReason.ConditionLoss: 
       break; 
      case BackgroundTaskCancellationReason.SystemPolicy: 
       break; 
     } 
     _defferal.Complete(); 
    } 

Cancellation Reasons

Canceled Event

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