2014-10-19 225 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