2009-10-01 46 views
0

在后台线程中创建webbrowser,然后应该导航到一个url并返回一个htmldocument,但由于某种原因导航失败,为什么?为什么此背景浏览器控件无法导航?

注意:这是您看到ME.url或我的类的一部分。 ... me.isrunning =布尔默认 me.url =位置的URI虚假导航到

Public Function GetDOC(ByVal url As Uri) As HtmlDocument 
    If Me.IsRunning Then 
     Throw New Exception("Object Currently In use") 
    End If 
    htmdoc = Nothing 
    Dim cp As New Threading.Thread(AddressOf thrdowo) 
    cp.SetApartmentState(Threading.ApartmentState.STA) 
    cp.Start() 
    run = True 

    While run 

    End While 
    Return htmdoc 

End Function 

Private Sub thrdowo() 
    Dim cbl As New WebBrowser 
    'cbl.Url = Me.URL 
    cbl.Navigate("about:blank") 
    cbl.Navigate(Me.URL) 

    While cbl.IsBusy 

    End While 
    htmdoc = cbl.Document 


    run = False 
End Sub 

回答

1

我不是Webbrowser控件的专家,但两周前我刚刚经历了同样的事情。问题在于,当您告诉Webbrowser执行某些操作(如导航或单击按钮)时,必须停止并执行其工作,包括等待网站响应其请求。这一切都异步发生但是,使用导航调用多次敲击它几乎肯定会失败。

你需要做的是让它工作(导航等),然后退出你当前的线程,等待Webbrowser完成你要求它做的事情,然后通过提出一个事件告诉你, 然后你可以进入下一步。

所以我所做的就是让一个对象维护一个状态,并且根据当前状态,它对Web浏览器执行一些操作,使状态前进,然后退出线程。

我有另一个对象(实际上是Form)接收来自Web浏览器的所有事件,确定事件何时意味着它已“完成”加载,然后再次重新调用第一个对象。

相关问题