Windows商店应用HttpClient问题

时间:2014-10-19 22:23:48

标签: c# httpclient

我在这里测试了一些代码并遇到了一个非常奇怪的问题。如果我的平板电脑处于打开状态,HttpClient类就像魅力一样,但只要电池安全状态启动并且屏幕被锁定,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();
        }

这是我得到的错误(添加异常记录器后):

  

发送请求时发生错误。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

问题是,当电池安全状态进入时,您的WinRT设备会将您的应用程序发送到后台。

  

每当用户将您的应用移动到后台时,您的应用都可以暂停或冻结,从根本上阻止任何下载死机。在某些情况下,应用程序可能会   甚至被终止,迫使你创建一个新的类实例,试图再次开始下载。幸运的是,WinRT提供了一种使用后台任务处理此特定方案的方法。

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

的引用

在这个网站上,您可以轻松地学习如何在Windows.Networking.BackgroundTransfer-Namespace中使用BackgroundTransfers。