2017-06-16 47 views
2

我遇到了一些麻煩StreamReader.ReadToEndAsync();Windows Phone。 ReadToEndAsync()的結果由於應用程序停用而損壞

//some get response code ... 
using (var response = getResponseTask.Result) 
{ 
    using (var responseStream = response.GetResponseStream()) 
    { 
    using (var responseStreamReader = new StreamReader(responseStream)) 
    { 
    var readToEndTask = responseStreamReader.ReadToEndAsync(); 
    var responseResult = await readToEndTask; 
    //and some json parse code here 
    } 
    } 
} 

所以,當我按下設備上的主頁按鈕(無論手機或模擬器),而ReadToEndAsync任務過程,結果字符串是不是在應用激活全長......也就是說,它的結尾剛切出不任何例外或警告。

因此,我無法解析我的json數據對象。

我該如何解決或避免這種情況?

謝謝大家提前!

回答

0

爲此,您需要將您的代碼作爲後臺任務運行。即使您的應用已停用,後臺任務也會運行。你可以參考:https://docs.microsoft.com/en-us/windows/uwp/launch-resume/support-your-app-with-background-tasks來學習後臺任務。 有兩種類型的後臺任務,正在處理& out進程。

+0

謝謝,我會試試看。 但是StreamReader的這種行爲正常且衆所周知?或者它是壞了還是什麼?因爲重新激活後'readToEndTask'對象具有RanToCompletion狀態並且具有null異常屬性,就像沒有什麼不好的事情發生一樣......我的意思是,真的每個人都通過將背景任務集成到他們的項目中來解決這個問題嗎?該死的很奇怪。 – ridley

+0

對我來說這並不奇怪,這是操作系統的行爲。即使您的應用程序處於後臺,OS也不會讓您連續運行任務。這是爲了避免不必要地使用電源,內存和其他資源。所以通常你的應用程序不會在後臺運行任務。雖然操作系統允許您在背景中執行任務,這對您的應用程序來說非常必要。有了一些限制和提供一些配置,你可以在後臺運行任務來解決你的目的。 –

相關問題