WebBrowser抛出未处理的异常

时间:2013-08-11 12:27:37

标签: .net vb.net winforms exception browser

我试图写一个小程序,让我在启动时登录我校的网络。直到最近,当我的网络浏览器开始抛出未处理的异常时,一切正常。这是我的代码:

WebBrowser1.Navigate("url")

While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
    Application.DoEvents()
End While

在while循环中抛出错误,说明

  

Visual Studio无法访问已删除的对象

我注意到,如果窗体的不透明度设置为100%,则不会抛出此异常。任何不透明度设置低于100%都会导致异常。但是,由于某种原因,将不透明度设置为100%会导致程序中出现许多其他错误。

造成这种情况的原因是什么?除了像这样的导航之外,在运行时根本没有触及WebBrowser,我当然没有删除它。

2 个答案:

答案 0 :(得分:1)

Application.DoEvents()会导致各种问题。你不应该使用它。

我最初的本能是完全删除While循环,因为它似乎没有任何用途。但是你说你已经把它包括在内“等待浏览器在运行其余代码之前完成导航。”在这种情况下,您仍应将其取出,但应将其替换为WebBrowser.DocumentCompleted event的处理程序,该处理程序在WebBrowser控件完成加载文档时引发。放置要在该事件处理程序方法中运行的任何代码。

Private Sub YourCurrentMethod()
    WebBrowser1.Navigate("url")

    ' (no While loop)
End Sub

Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    ' your code goes here
End Sub

答案 1 :(得分:0)

你应该注意不止一次触发的downloadcompleted事件,以确保你实际上已经加载了所有页面,检查这个事件附带的url

private _url as string = "some_url"
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    If e.Url.ToString <> _url Then Exit Sub
    ' your code goes here
End Sub