【发布时间】:2009-10-20 21:11:20
【问题描述】:
我有一个名为 SiteAsyncDownload.cs
的类代码如下:
public class SiteAsyncDownloader
{
WebClient Client = new WebClient();
string SiteSource = null;
/// <summary>
/// Download asynchronously the source code of any site in string format.
/// </summary>
/// <param name="URL">Site URL to download.</param>
/// <returns>Website source code - string.</returns>
public string GetSite(string URL)
{
Uri Site = new Uri(URL);
Client.DownloadDataAsync(Site);
Client.DownloadDataCompleted += new DownloadDataCompletedEventHandler(FinishedDownloading);
//Don't know if this would work. Consult with StackOverflow.
while (true)
{
if (SiteSource != null)
{
return SiteSource;
}
}
}
void FinishedDownloading(object sender, DownloadDataCompletedEventArgs e)
{
SiteSource = Encoding.ASCII.GetString(e.Result);
throw new NotImplementedException();
}
}
如果这能按我的意愿工作,我不是 100%。我希望班级异步下载它需要的任何内容,下载完成后返回字符串。这是正确的方法吗?
例如,这是我打算如何使用它的示例:
SiteAsyncDownloader Downloader = new SiteAsyncDownloader();
/// <summary>
/// Search for a movie using only a name.
/// </summary>
/// <param name="MovieName">Movie name.</param>
public void SearchMovie(string MovieName)
{
string SearchURL = FormatSearch(MovieName);
string SearchSource = Downloader.GetSite(SearchURL);
string MovieURL = FindMovieURL(SearchSource);
string MovieSource = Downloader.GetSite(MovieURL);
FindInformation(MovieSource);
}
在 SearchMovie() 方法的第二行代码中,我的程序会因为异步下载而崩溃吗?我该如何考虑这一点并使其正常工作?
【问题讨论】:
标签: c# asynchronous screen-scraping webclient