2015-05-24 30 views
8

Để sử dụng ứng dụng UWP trên Raspberry Pi 2 không đầu với Windows 10 IOT Core, chúng tôi có thể sử dụng mẫu ứng dụng nền cơ bản tạo ứng dụng UWP mới chỉ với một nhiệm vụ nền sẽ được thực thi khi khởi động:Windows 10 IOT Vòng đời (hoặc: cách tính tài sản chấm dứt ứng dụng nền)

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

để giữ cho một ứng dụng đang chạy, chúng ta có thể sử dụng đoạn mã sau khởi động:

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

    //Execute arbitrary code here. 
} 

bằng cách này, ứng dụng giữ chạy và hệ điều hành sẽ không giết ứng dụng sau bất kỳ thời gian chờ nào trong vũ trụ IOT.

Cho đến giờ, rất tuyệt vời.

Tuy nhiên: Tôi muốn để có thể đóng đúng cách ứng dụng nền khi thiết bị tắt (hoặc ứng dụng được yêu cầu 'nhẹ nhàng' gần

Trong một ứng dụng UWP 'bình thường', bạn có thể đăng ký vào. OnSuspending sự kiện.
Làm thế nào tôi có thể nhận được thông báo về một shutdown sắp xảy ra/đóng trong kịch bản nền tảng này?

Help được đánh giá rất nhiều.
Cảm ơn trước!
-Simon

Trả lời

8

Bạn cần xử lý sự kiện đã hủy. Tác vụ nền sẽ bị hủy nếu thiết bị tắt máy đúng cách. Windows cũng sẽ hủy các tác vụ nếu họ chưa đăng ký.

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

Các vấn đề liên quan