0
如何停止正在运行的后台任务,而无需用户转到我的应用程序的用户界面?停止后台任务
如何停止正在运行的后台任务,而无需用户转到我的应用程序的用户界面?停止后台任务
如果您BackgroundTask是同步的,那么你只需要离开运行方法与任务完成。
如果你有异步BackgroundTask,你需要使用BackgroundTaskDeferral - 获得的开头和调用完成()一旦你完成你的工作。正如有人说at MSDN:
- 如果你在你的后台任务运行任何异步代码,那么你的后台任务需要使用延期。如果您不使用延期,则如果Run方法在异步方法调用完成之前完成,后台任务进程可能会意外终止。
你应该也知道,操作系统可以终止早期你的任务 - 如果任务超过the limits或触发条件不再满足 - 例如MaintenanceTrigger。
当你与异步BackgroundTask结束,注意光洁度/取消所有任务,您可能需要实现CancellationToken。
您是否尝试过:取消所有*任务*,取消注册BTask,调用deferal.Complete()并返回? – Romasz 2014-12-13 13:52:59
我可以从应用程序的UI线程完成所有这些。但是,我试图在我试图停止的后台任务的某个条件下停止后台任务。另外我不希望backgroundTask被注销。 我在条件语句下使用'deferal.Complete()',但我不确定这是否正确。 – user3927312 2014-12-13 17:32:18
一切都取决于你的BackgroundTask - 你有什么* Run *方法。如果它是同步的,那么你就不需要经典 - 简单*返回就足够了。另一方面,如果你有异步的BackgroundTask和/或使用额外的线程,你应该得到反击,当你完成你的工作(或取消)时,请调用deferal.complere()。明天我会试着发表一个答案。 – Romasz 2014-12-13 23:15:15