是否可以在BackgroundWorker的後臺線程中創建WebBrowser控件?在backgroundworker的後臺線程中創建webbrowser控件
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Using web1 As New WebBrowser
End Using
End Sub
這引發以下錯誤:
ActiveX control '8856f961-340a-11d0-a96b-00c04fd705a2' cannot be instantiated because the current thread is not in a single-threaded apartment.
有誰知道一個方法來創建一個web瀏覽器的背景?我想這樣做是爲了從網站中提取信息,然後吐出各種HTML DOM陣列
我不是試圖將一個網頁瀏覽器添加到窗體,但加載它作爲一個類,並使用它的DOM功能,從提取信息網站,最終目標是將htmldocument對象傳送到backgroundworker結果對象 – Jim
OK。然後,而不是使用BackgroundWorker,創建一個真正的線程並使用.SetApartmentState(ApartmentState.STA)。這可能有效。 –
我做了很多這樣的工作,並發現用這種方法試圖做大規模的任何事情都非常痛苦。 WB控制太脆弱了。當以這種方式自動化時,它崩潰,顯示模式對話框,返回空白頁面,以及其他許多問題。我去下載了原始的html並且用雄偉的解析它(http://www.majestic12.co.uk/projects/html_parser.php)。從長遠來看,這可能會快1000倍,更可靠。 –