2017-06-16 6 views
2

J'ai des problèmes avec StreamReader.ReadToEndAsync();Windows Phone. Résultat de ReadToEndAsync() corrompu par la désactivation de l'application

//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 
    } 
    } 
} 

Alors, quand j'appuie sur le bouton d'accueil sur l'appareil (quel que soit le téléphone ou émulateur), alors que la tâche ReadToEndAsync est en cours, chaîne de résultat n'est pas long sur la réactivation de l'application ... à savoir c'est terminant juste détacha sans toute exception ou avertissement. Par conséquent, je ne parviens pas à analyser mes données json pour les objecter.

Comment puis-je résoudre ce problème ou éviter cette situation?

Merci à tous d'avance!

Répondre

0

Pour cela, vous devez exécuter votre code en arrière-plan. Les tâches d'arrière-plan s'exécuteront même si votre application est désactivée. Vous pouvez vous référer: https://docs.microsoft.com/en-us/windows/uwp/launch-resume/support-your-app-with-background-tasks pour apprendre les tâches d'arrière-plan. Il existe deux types de tâches d'arrière-plan, en cours de processus: &.

+0

Merci, je vais essayer. Mais ce comportement de StreamReader est-il normal et bien connu? Ou est-ce cassé ou quelque chose? Parce qu'après la réactivation, l'objet 'readToEndTask' a le statut RanToCompletion avec une propriété d'exception nulle comme si rien ne se passait ... Je veux dire, est-ce que tout le monde résout vraiment ce problème en intégrant des tâches de fond dans leurs projets? Putain bizarre. – ridley

+0

Pour moi, ce n'est pas bizarre, c'est le comportement du système d'exploitation. OS ne vous permettra pas d'exécuter des tâches en continu même si votre application est en arrière-plan. Cela permet d'économiser votre appareil contre l'utilisation inutile de l'alimentation, de la mémoire et d'autres ressources. Donc, en général, votre application n'exécutera pas de tâches en arrière-plan. Bien que le système d'exploitation vous permet d'effectuer une tâche en arrière-plan qui sont vraiment nécessaires pour vos applications. Avec certaines limitations et en fournissant certaines configurations, vous pouvez exécuter des tâches en arrière-plan pour résoudre votre problème. –