2014-12-13 141 views
0

如何停止正在運行的後臺任務,而無需用戶轉到我的應用程序的用戶界面?停止後臺任務

+0

您是否嘗試過:取消所有*任務*,取消註冊BTask,調用deferal.Complete()並返回? – Romasz 2014-12-13 13:52:59

+0

我可以從應用程序的UI線程完成所有這些。但是,我試圖在我試圖停止的後臺任務的某個條件下停止後臺任務。另外我不希望backgroundTask被註銷。 我在條件語句下使用'deferal.Complete()',但我不確定這是否正確。 – user3927312 2014-12-13 17:32:18

+0

一切都取決於你的BackgroundTask - 你有什麼* Run *方法。如果它是同步的,那麼你就不需要經典 - 簡單*返回就足夠了。另一方面,如果你有異步的BackgroundTask和/或使用額外的線程,你應該得到反擊,當你完成你的工作(或取消)時,請調用deferal.complere()。明天我會試着發表一個答案。 – Romasz 2014-12-13 23:15:15

回答

1

如果您BackgroundTask是同步的,那麼你只需要離開運行方法與任務完成。

如果你有異步BackgroundTask,你需要使用BackgroundTaskDeferral - 獲得的開頭和調用完成()一旦你完成你的工作。正如有人說at MSDN

  • 如果你在你的後臺任務運行任何異步代碼,那麼你的後臺任務需要使用延期。如果您不使用延期,則如果Run方法在異步方法調用完成之前完成,後臺任務進程可能會意外終止。
  • 你應該也知道,操作系統可以終止早期你的任務 - 如果任務超過the limits或觸發條件不再滿足 - 例如MaintenanceTrigger

    當你與異步BackgroundTask結束,注意光潔度/取消所有任務,您可能需要實現CancellationToken