Avi*_*rix 1 c# windows-phone-7 windows-phone windows-phone-8
/*在写这个问题,测试的东西,我设法回答这个问题,我分享我的研究结果,这样他们就可以帮助到其他一些可怜的灵魂.请看下面的答案.*/
我正在尝试在后台任务中从我的API获取JSON数据.我有很好的后台任务和运行它的事情,但当我尝试获取数据时,没有任何反应?!?
这是我使用的代码:
protected override void OnInvoke(ScheduledTask task)
{
string wurl = @"http://test.com/api/stuff/getdata";
WebClient webClient = new WebClient();
webClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webClient_DownloadStringCompleted);
webClient.DownloadStringAsync(new Uri(wurl));
NotifyComplete();
}
Run Code Online (Sandbox Code Playgroud)
这就是...... webClient_DownloadStringCompleted
永远不会被执行.
这里的关键是异步WebClient
执行其方法并 在有机会获取数据之前执行.NotifyComplete()
WebClient
当您致电时NotifyComplete()
,它会通知操作系统您已完成执行任务,系统应终止该任务.
解决方案是NotifyComplete()
在异步方法结束时移动webClient_DownloadStringCompleted
(在这种情况下)和... voala!
警告1:您有最多25秒的时间来完成您正在做的任何事情,否则任务将被终止.
警告2:您的后台任务消耗不超过(在某些手机上)6 MB(在我使用Windows Phone 8测试的模拟器上)10 MB内存!如果您的后台任务确实如此,它将被终止.
这是很好的考虑使用资源密集型后台任务,如果你的应用程序将会占用更多的内存和时间(最多10分钟),注意这种类型的任务只有当手机正在充电时可!