我正在使用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