【问题标题】:Silverlight webclient downloadstringasync questionSilverlight webclient 下载stringasync 问题
【发布时间】:2010-11-13 15:50:25
【问题描述】:

我正在尝试在 windows phone 7 中组装一个简单的 RSS 提要阅读器,但我很难理解异步模型的工作原理。

我有一个帮助类,当我传递它时,一个 URL 将解析并构建一个 ViewModel 对象并返回它。所以我想要实现的是:

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

在 loadfeed 方法中,我将创建一个 webclient 对象并构建 FeedViewModel。但是,由于 WebClient 的 DownloadStringAsync 是异步的,并且结果返回到另一个方法,我无法弄清楚如何从 LoadFeed 方法返回 FeedViewModel。

任何示例或博客文章链接都将不胜感激。我已经做了很多谷歌搜索,但找不到任何我将如何解决此问题的示例。

【问题讨论】:

    标签: silverlight asynchronous windows-phone-7 webclient


    【解决方案1】:

    您无法从 LoadFeed 函数返回 ViewModel,因为正如您所发现的,调用是异步的。

    您有多种选择,例如。你可以:

    • 使 LoadFeed 方法成为非静态方法并将其放入一个类中(例如 FeedRetriever)
    • 在 FeedRetriever 类中公开一个事件(或命令)“FeedLoaded”
    • 在您的 ViewModel 存储库中订阅该事件/命令并在处理程序中获取 ViewModel

    【讨论】:

      【解决方案2】:

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

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

      有两套文章可以帮助你建立一个 RSS 阅读器 -

      1. Eugene Chaikin has built a simple RSS reader 使用 WebClient。
      2. Dennis Delimarsky 有一篇关于构建 RSS 阅读器的两部分文章 - part 1, part 2

      HTH,indyfromoz

      【讨论】:

      • 我认为我没有正确解释我的问题。我知道结果返回到回调事件。与您提供的第一个示例一样,我的问题是 UI 与检索提要数据的代码相结合。我希望返回提要数据的类独立于我选择持久/显示它的方式
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多