2014-10-19 283 views
0

我在这里测试一些代码,并遇到了一个非常奇怪的问题。如果我的平板电脑处于打开状态,但HttpClient类的功能就像一个魅力,但每当电池安全状态启动并且屏幕被锁定时,HttpClient类将引发异常,并且该应用突然退出,这使我有机会记录该异常。如果我没有弄错,这个错误似乎是一个发送请求错误,但这很奇怪,因为在平板电脑打开时我可以完全访问互联网。Windows商店应用程序HttpClient问题

在这里,我正在使用的代码,并在该状态下,一个碰撞(System.Net.Http命名空间):

private static async Task<string> HttpGet(string uri) 
    { 
     using (var client = new HttpClient()) 
     { 
      client.DefaultRequestHeaders.Add("User-Agent", BotUserAgent); 
      var response = await client.GetAsync(uri); 
      return await response.Content.ReadAsStringAsync(); 
     } 
    } 

或者我用web.http命名空间的客户端与同样的结果:

using(var client = new Windows.Web.Http.HttpClient()) 
     { 
      client.DefaultRequestHeaders.Add("User-Agent", BotUserAgent); 
      var response = await client.GetAsync(new Uri(uri)); 
      return await response.Content.ReadAsStringAsync(); 
     } 

这是错误我得到(添加例外记录仪后):

在发送的出错请求。

任何想法?

回答

0

的问题是,你的WinRT-设备发送你的应用的背景当电池安全状态KIKS。

每当用户移动您的应用到背景中,应用程序可被暂停或冻结,从根本上阻止任何下载死亡的痕迹。在某些情况下,应用程序甚至可能终止 ,迫使您创建该类的新实例,以尝试再次开始下载。幸运的是,WinRT提供了一种使用后台任务来处理这个特定场景的方法。

这是http://www.informit.com/articles/article.aspx?p=2229233&seqNum=6

报价在这个网站是一个简单的教程,按照有关如何在Windows.Networking.BackgroundTransfer命名空间使用BackgroundTransfers。

+0

非常感谢您的回答!与你提供的链接,我能够实现背景下载,并最终解决问题。谢谢! – 2014-10-20 18:45:33