Existe-t-il un moyen d'utiliser les méthodes serveur de manière asynchrone dans l'application Windows Phone 7? J'ai une liste de données. Dans la boucle foreach, envoyez une requête au serveur pour chaque donnée mais elles ne sont pas complétées dans l'ordre de mon appel. Comment puis je faire ça?Appel de méthode asynchrone dans Windows Phone 7
Répondre
J'ai une liste de données. Dans la boucle foreach, envoyez une requête au serveur pour chaque donnée mais elles ne sont pas complétées dans l'ordre de mon appel. Comment puis je faire ça?
Eh bien, vous pouvez effectivement faire les synchrone - se débarrasser de celui-ci étant une boucle réelle foreach , et au lieu mettre en place les callbacks asynchrones appropriées de sorte que lorsque la première réponse vient, vous envoyer la deuxième demande , etc., jusqu'à ce qu'il n'y ait plus de demandes. (Vous pouvez utiliser un Queue<T>
pour mettre en file d'attente les demandes à envoyer.)
Ne revenez pas aux modes synchrones simplement parce que quelque chose ne semble pas fonctionner. Il y a de nombreux avantages à travailler dans un monde asynchrone. Il y a aussi des dangers. La clé est de savoir comment éviter ces dangers. Voici un exemple utilisant WebClient qui aura des effets néfastes.
foreach (var item in items)
{
WebClient client = new WebClient();
client.DownloadStringCompleted += (sender, args) =>
{
item.Stuff = args.Result;
};
client.OpenReadAsync(new Uri("http://mydomain.com/stuff"));
}
Lorsque le client est retourné, il n'y a aucune garantie que item
est le même élément « créé » la demande du client. C'est ce qu'on appelle "l'accès au plus proche". Ce qui signifie simplement que vous pourriez essayer de modifier quelque chose qui n'existe plus ou qui n'est pas le même. La bonne façon d'aborder est de capturer votre article dans le foreach comme tel:
foreach (var item in items)
{
var internalItem = item;
WebClient client = new WebClient();
client.DownloadStringCompleted += (sender, args) =>
{
internalItem.Stuff = args.Result;
};
client.OpenReadAsync(new Uri("http://mydomain.com/stuff"));
}
Cela garantit que vous utilisez l'élément correct car il a été capturé dans le cadre de l'foreach.
- 1. Lecture asynchrone XML dans Windows Phone 7
- 2. Windows Phone 7 Async Méthode invocations multiples
- 3. Windows Phone 7 appel Service Web ASMX
- 4. Windows Phone 7 - Réception d'un appel
- 5. MessageBox.Show pour Windows Phone 7
- 6. Obtenir le résultat de la méthode asynchrone dans Windows Phone
- 7. Dans Windows Phone 7
- 8. Windows Phone 8 Appel de requête Web asynchrone pour XML
- 9. Attente jusqu'à la valeur asynchrone Windows Phone 7
- 10. Windows Phone: appelez une méthode asynchrone dans OnNavigatedTo
- 11. Méthode d'extension ne fonctionnant pas dans silverlight windows phone 7
- 12. Est-ce que Windows Phone 7 autorise la programmation asynchrone?
- 13. Windows Phone 7 - contrôle contenu et demande asynchrone
- 14. L'équivalent de onResume() dans Windows Phone 7
- 15. appel une autre application à l'intérieur de Windows Phone 7
- 16. SHOUTcast dans Windows Phone 7
- 17. Windows Phone 7 dans VS2010
- 18. Listpicker dans Windows Phone 7
- 19. Préférences dans Windows Phone 7
- 20. Environment.NewLine dans windows phone 7
- 21. ProgressBar Dans Windows Phone 7?
- 22. InvalidDataContractException dans Windows Phone 7?
- 23. ScrollToHorizontalOffset dans Windows Phone 7
- 24. PopUp dans Windows Phone 7
- 25. ASCIIEncoding Dans Windows Phone 7
- 26. grille dans windows phone 7
- 27. Colonnes dans Windows Phone 7
- 28. sérialisation dans Windows Phone 7
- 29. Enregistrer des enregistrements dans Windows Phone 7
- 30. Windows Phone 7 États