我使用后台线程对web服务进行异步调用,并返回后台线程正在运行的results.When,并且我的应用程序被停用,比如用户按home按钮,我如何处理它?
private async void Application_Deactivated(object sender, DeactivatedEventArgs e)
{
//What should I do here?
}我从下面的博客http://www.wintellect.com/blogs/jgarland/proceed-with-caution---windows-phone-8-app-lifecycle-events-vs-async-methods中了解到,我不能等到被停用的method.Also中的后台线程完成时,它建议使用同步calls.In情况,我必须取消在停用事件中的后台线程,如何找到当前正在运行的后台线程?在每个调用web服务的页面中,used.Is都有一个后台线程可以在app再次激活后恢复后台线程吗?
发布于 2014-02-19 06:18:47
您是对的,当应用程序被停用时,所有进程都会停止- MSDN源
在引发停用事件后,当用户向前导航,远离应用程序时,操作系统将尝试将该应用程序置于休眠状态。在这种状态下,应用程序的所有线程都会停止,不会进行任何处理,但是应用程序在内存中保持不变。
在停用事件中,应该对所有后台线程调用Cancel请求。如果您正在使用亚恩克-等待,那么您可以为这些方法配备CancellationTokenSource。下面是关于这一点的更多信息:启用异步的进度和取消、取消异步任务或任务列表,您可以在Stephen博客上找到很多信息。
至于知道哪个任务正在运行的问题,我认为您可以使用这个CancellationTokenSource来检查它--如果它不是null,那么它就意味着您的基础线程正在工作。
至于还原您的方法,一切取决于您的代码和该方法执行的内容。如果您正在下载一组文件,那么您可以记住下载了哪些文件,以及激活调用方法之后下载其余的文件。如果执行某些计算,则可以记住该方法停止的位置,并尝试继续进行进一步的计算。我觉得有时候会很困难。你必须记住你有有限时间为10秒
不应等到停用事件发生后才存储此数据。请记住,所有应用程序生命周期事件都强制应用程序完成任何任务的时间限制为10秒。
关于其他可能性:
如果您想在后台过程中执行一些操作,那么如果您想下载一个文件,可以使用背景代理和背景转移。也有背景音频,但我想你不是在问它。
如果您希望您的应用程序停留在前台锁定屏幕时,那么你可以失活怠速检测。
https://stackoverflow.com/questions/21871048
复制相似问题