我有很多网址(大约 800 个)要从网上下载。我有一个类:HttpDownloader.cs,它与 HttpWebRequest 类一起使用来下载和获取 html 页面。之后,我通过正则表达式对页面进行解析。
我想使用 BackgroundWorker 组件,但我不知道如何为所有页面执行它。通过一个循环,或类似的东西。
我的代码:
我尝试与 ThreadPool 一起使用,它确实有问题。我尝试了 4 个网址,但没有成功。
foreach (string link in MyListOfUrls)
{
ThreadPool.QueueUserWorkItem((o) => {
HttpDownloader httpDownload = new HttpDownloader(link);
string htmlDoc = httpDownload.GetPage();//get the html of the page
HtmlDocument doc=doc.LoadHtml(htmlDoc);//load html string to doc for pharsing
DoPharsing();//my func for pharsing
Save();//save into dataBase
});
}
因为我在 func 中使用与数据库和 DataTable 的连接,所以在使用 ThreadPool 时出现异常:
“函数评估已禁用,因为之前的函数评估超时。您必须继续执行才能重新启用函数评估。”
所以,我无法从 DataTable 中获取数据。也许我需要全部下载,然后进行解析并保存?
如何通过 BackgroundWorker 组件将其更改为异步?
ps 不要建议我使用 Async Tpc,因为我没有设法下载它。
谢谢