2010-11-13 8 views
0

Je suis en train de mettre en place un simple lecteur de flux RSS dans Windows Phone 7, mais j'ai du mal à comprendre comment fonctionne le modèle asynchrone. Ce que j'ai est une classe d'aide que quand je le passe une URL analysera et construira un objet ViewModel et le renverra. Donc ce que je suis en train de acheive est la suivante:Silverlight webclient downloadstringasync question

public static class FeedHelper 
{ 
    public static FeedViewModel LoadFeed(string url) 
    { 
     //parse rss feed and return view model 
    } 
} 

Dans la méthode loadfeed Je voudrais faire un objet webclient et construire la FeedViewModel. Cependant, parce que DownloadStringAsync du WebClient est asynchrone et que le résultat est retourné à une autre méthode, je n'arrive pas à comprendre comment je peux retourner le FeedViewModel de ma méthode LoadFeed.

Des exemples ou des liens vers des articles de blog seraient appréciés. J'ai fait un peu de googling, mais je ne trouve aucun exemple de la façon dont j'aborderais ce problème.

Répondre

0

Vous ne pouvez pas retourner le ViewModel de votre fonction LoadFeed parce que vous avez découvert, l'appel est async .

Vous avez plusieurs choix, par ex. vous pouvez: (. Ex FeedRetriever)

  • rendre la méthode LoadFeed non statique et le mettre dans une classe
  • dans la classe FeedRetriever exposer un événement (ou une commande) « FeedLoaded »
  • dans votre référentiel ViewModel souscrit à cet événement/commande et prend le ViewModel dans le gestionnaire
0

Vous devez configurer le gestionnaire d'événements DownloadStringCompleted pour effectuer le traitement du flux RSS. Notez que WebClient renvoie sur le thread d'interface utilisateur et que vous êtes à l'abri des exceptions d'inter-thread. Voici l'extrait de code qui va dans la méthode LoadFeed -

WebClient wc = new WebClient(); 
wc.DownloadStringCompleted += new DownloadStringCompleteEventHandler(DownloadSettingsComplete); 
wc.DownloadStringAsync(uri); 

Il y a deux séries d'articles qui vous aideront à buiding un lecteur RSS -

  1. Eugene Chaikin has built a simple RSS reader qui utilise WebClient.
  2. Dennis Delimarsky a un article en deux parties sur la construction d'un lecteur RSS - part 1, part 2

HTH, indyfromoz

+0

Je ne pense pas avoir correctement expliqué mon problème. Je comprends que le résultat revient à l'événement de rappel. Mon problème, comme avec le premier exemple que vous avez fourni est que l'interface utilisateur est couplée avec le code qui récupère les données de flux. Je veux que la classe qui retourne les données de flux soit indépendante de la façon dont je choisis de persister/afficher – JFoulkes

Questions connexes