我正在构建此方法,只返回网页的内容。但是,我无法返回内容下载后触发的事件,收到此错误:
由于'System.Net.DownloadStringCompletedEventHandler'返回void,因此返回关键字后面不能包含对象表达式。
如果我在活动之外接受回报,则在下载完成后不会启动,返回无效并因此使此无效
string ScrapePage(string url)
{
WebClient GetArticleHTML = new WebClient();
GetArticleHTML.DownloadStringAsync(new Uri(url, UriKind.RelativeOrAbsolute));
GetArticleHTML.DownloadStringCompleted += (s, x) =>
{
return x.Result;
};
}
答案 0 :(得分:1)
欢迎来到异步编程世界。
您无法在事件中返回,因为事件通常在.NET中返回void
。事实上,通过尝试这样做,你试图强迫它同步!如果您的代码有效,那么在调用事件处理程序时,ScrapePage
将很快完成,并且您将返回值,好吧,没有,因为函数已经返回了!
所以你有两个选择:
使方法同步(使用DownloadString
而不是异步版本)并在完成后返回。这可能是不可能的,因为你在WP8上,它喜欢异步方法。
了解ScrapePage
方法只需启动字符串下载。事件处理程序需要通知任何想要完成下载的字符串的人。然后,它可以将方法调用中下载的字符串作为参数传递。
实际上,你会想做(2),特别是如果这是在UI线程上。