2010-11-13 30 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