/ *在写这个问题和测试内容时,我设法回答了这个问题,我正在分享我的发现,这样他们就会对其他一些可怜的灵魂有所帮助。请看下面的答案。 * /
我正在尝试在后台任务中从我的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
永远不会被执行。
答案 0 :(得分:5)
这里的关键是WebClient
执行其方法 异步 ,NotifyComplete()
在WebClient
拥有之前执行有机会获取数据。
当您致电NotifyComplete()
时,它会通知操作系统您已完成执行任务,系统应终止该任务。
解决方法是在异步方法NotifyComplete()
(在本例中)和... voala!
webClient_DownloadStringCompleted
警告1: 您最多需要25秒才能完成正在执行的任务,否则任务将被终止。
警告2: 您的后台任务不能消耗超过(在某些手机上)6 MB(在我使用Windows Phone 8测试的模拟器上)10 MB内存!如果您的后台任务确实如此,它将被终止。
如果您的应用会消耗更多内存和时间(最多10分钟),最好考虑使用资源密集型后台任务,请注意此类任务仅在手机充电时可用!