我正在使用BrowserControl导航到网站上的网页范围,然后解析HTML并提取有关书籍等的信息......我遇到了与线程相关的问题(我认为)...如何为WebBrowser控件处理线程
我有这样的事情。
// MAIN LOOP
for (int i = 0; i < NumberOfPages; i++)
{
WebBrowser.Navigate("http://AWebSite/" + NumberOfPages.ToString());
}
// HANDLE ON_LOADED EVENT
void WebBrowser_LoadCompleted(object sender, NavigationEventArgs e)
{
// Retrieve HTMLDocument, Parse it etc
}
现在,因为它需要几秒钟的事件,火灾控制导航到一个页面后,我有两个选择之一:
OPTION1 等待几秒钟,在我的主循环,像这样的:
for (int i = 0; i < NumberOfPages; i++)
{
WebBrowser.Navigate("http://www.mysite.com");
// wait for 5 seconds
DateTime wait = new DateTime();
while (new DateTime().Ticks < wait.Ticks + 5000)
{
// not sure if I need do events here
}
}
OPTION2 另一个想法是一个全局变量为(布尔)标记,告知事件处理程序的页面仍然在下载(该标志设置为繁忙的主要外观,然后复位然后在重置后重置处理返回的html)。
我有一种感觉这两种方法都是笨拙的,真正有一个更好的办法就是以某种方式处理这两件事情(在不同的线程上运行?)
谢谢,试图通读你的例子,但它看起来高于我的头:-(有没有更简单的方法来做到这一点,因为我不介意一次只提取一个url? – underwater 2010-11-06 17:29:57