Skip to main content
 首页 » 编程设计

c#之Windows Phone之Web 客户端请求未执行

2024年02月02日33davidwang456

/* 在写这个问题和测试东西时,我设法回答了这个问题,我正在分享我的发现,这样它们会对其他可怜的人有所帮助。请参阅下面的答案。 */

我正尝试在后台任务中从我的 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 异步 执行它的方法并且 NotifyComplete() 在执行之前WebClient 有机会获取数据。

当您调用 NotifyComplete() 时,它会通知操作系统您已完成任务执行,系统应终止它。

解决方案是将 NotifyComplete() 移动到异步方法 webClient_DownloadStringCompleted 的末尾(在本例中),然后……瞧!

警告 1:您最多有 25 秒的时间来完成您正在做的任何事情,否则任务将终止。

警告 2: 您的后台任务消耗的内存不能超过(在某些手机上)6 MB(在我用 Windows Phone 8 测试的模拟器上)10 MB 内存!如果您的后台任务执行了,它将被终止。

如果您的应用要消耗更多内存和时间(最多 10 分钟),最好考虑使用资源密集型后台任务,请注意此类任务仅在手机充电时可用!