2015-05-24 11 views
8

Aby użyć aplikacji UWP na bezgłowym Raspberry Pi 2 z Windows 10 IOT Core możemy użyć szablonu aplikacji w tle, który w zasadzie tworzy nową aplikację UWP tylko z zadania w tle, który jest wykonywany na starcie:Windows 10 IOT Lifecycle (lub: jak właściwość zakończyć aplikację tła)

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

W celu utrzymania działającej aplikacji, możemy użyć następującego kodu startowego:

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

    //Execute arbitrary code here. 
} 

ten sposób aplikacja działa dalej i OS nie zabije aplikacji po przekroczeniu limitu czasu wszechświat IOT.

Jak dotąd, świetnie.

Jednakże: Chcę, aby móc prawidłowo zamknąć aplikację tła, gdy urządzenie wyłącza się (lub aplikacja zostanie poproszony o „delikatnie” Zamknij

W „normalnym” UWP aplikacji można zapisać się do. OnSuspending wydarzenie.
Jak mogę dostać powiadomienie o wyłączeniu nieuchronnego/zamykania w tym scenariuszu tle?

pomoc jest mile widziana.
Dzięki z góry!
-Simon

Odpowiedz

8

Musisz obsłużyć anulowane wydarzenie. Zadanie w tle zostanie anulowane, jeśli urządzenie zostanie poprawnie zamknięte. Windows anuluje także zadania, jeśli zostaną wyrejestrowane.

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

Powiązane problemy