2010-11-13 88 views
0

我试图把一个简单的RSS阅读器放在Windows Phone 7中,但我很努力地理解异步模型是如何工作的。Silverlight的Web客户端下载字符串同步问题

我有一个帮助类,当我通过它的URL将解析并建立一个ViewModel对象并返回它。那么,我想acheive是这样的:

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

在loadfeed方法我会做一个WebClient的对象,并建立了FeedViewModel。但是,因为WebClient的DownloadStringAsync是异步的,并且结果返回到另一个方法,所以我无法弄清楚如何从LoadFeed方法返回FeedViewModel。

任何示例或博客文章的链接,将不胜感激。我做了很多Google搜索,但找不到任何有关我如何处理这个问题的例子。

回答

0

因为当你发现你不能从你的LoadFeed函数返回视图模型,该呼叫是异步。

您有几种选择,例如:你可以:(为前FeedRetriever)在

  • 使LoadFeed方法非静态,并把它变成一个类中FeedRetriever类
  • 暴露的事件(或命令)“FeedLoaded”
  • 您的ViewModel存储库订阅该事件/命令,并采取处理器中的ViewModel
0

您需要设置WebClientDownloadStringCompleted事件处理程序来处理RSS提要。请注意,WebClient在UI线程上返回,您可以安全地避免跨线程异常。下面是代码进入LoadFeed方法的片段 -

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

有两套的文章,这将有助于你在层楼高的RSS阅读器 -

  1. 使用Web客户端Eugene Chaikin has built a simple RSS reader
  2. 丹尼斯Delimarsky对建设一个RSS阅读器两个部分组成的文章 - part 1part 2

HTH,indyfromoz

+0

我不认为我正确地解释我的问题。我知道结果会回到回调事件中。我的问题与您提供的第一个示例相同,即UI与正在检索馈送数据的代码耦合。我希望返回馈送数据的类与我选择如何保持/显示它无关 – JFoulkes 2010-11-13 19:57:26