[英]Windows Phone - Web client request doesn't get executed
/ *在写这个问题和测试东西的时候,我设法回答了这个问题,我在分享我的发现,这样对其他可怜的人会有所帮助。 请参阅下面的答案。 * /
我正在尝试在后台任务中从我的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();
}
仅此webClient_DownloadStringCompleted
... webClient_DownloadStringCompleted
永远不会执行。
这里的关键是WebClient
异步执行其方法,并且在WebClient
有机会获取数据之前先执行NotifyComplete()
。
调用NotifyComplete()
,它会通知OS您已完成执行任务,系统应终止该任务。
解决方案是将NotifyComplete()
移动到异步方法webClient_DownloadStringCompleted
(在本例中为)的末尾,然后... voala!
警告1:您最多有25秒的时间来完成您正在做的事情,否则任务将终止。
警告2:您的后台任务消耗的内存不能超过(在某些手机上)6 MB(在我使用Windows Phone 8测试的仿真器上)需要10 MB的内存! 如果您的后台任务执行了,它将终止。
如果您的应用要消耗更多的内存和时间(最多10分钟),请考虑使用资源密集型后台任务,请注意,此类任务仅在手机充电时可用!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.