2014-10-07 84 views
1

我正在構建此方法的過程中,該方法僅返回網頁的內容。但是,我無法返回內容下載後觸發的事件,因此得到此錯誤:返回內部事件完成處理程序

因爲'System.Net.DownloadStringCompletedEventHandler'返回void,所以返回關鍵字後面不能有對象表達式。

如果我把事件之外的回報,它不會着火下載完成後,返回void並因此使這個沒用

string ScrapePage(string url) 
     { 
      WebClient GetArticleHTML = new WebClient(); 
      GetArticleHTML.DownloadStringAsync(new Uri(url, UriKind.RelativeOrAbsolute)); 
      GetArticleHTML.DownloadStringCompleted += (s, x) => 
      { 
       return x.Result; 
      }; 
     } 

回答

1

歡迎異步編程的世界。

由於事件通常在.NET中返回void,所以無法返回事件。事實上,通過試圖做到這一點,你試圖強制它是同步的!如果你的代碼有效,那麼當事件處理程序被調用時,ScrapePage將會很長時間完成,並且你將返回值,因爲函數已經返回,所以沒有任何東西。

所以,你有兩個選擇:

  1. 使該方法同步(使用DownloadString而不是異步版本)和它完成後返回。這可能是不可能的,因爲你在WP8上,它喜歡異步方法。

  2. 明白ScrapePage方法只是開始字符串下載。事件處理程序將需要通知誰想要字符串完成下載。然後它可以將方法調用中的下載字符串作爲參數傳遞。

實際上,你會想做(2),特別是如果這是在UI線程上。

相關問題