1

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

WebBrowser1.Navigate("url")

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

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

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

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

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

4

2 回答 2

1

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

我最初的直觉是While完全删除循环,因为它似乎没有任何用途。但是您说您已经包含它“以等待浏览器完成其导航,然后再运行其余代码。” 在这种情况下,您仍应将其取出,但应将其替换为WebBrowser.DocumentCompletedevent的处理程序,该处理程序在 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
于 2013-08-11T13:14:27.473 回答
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 
于 2013-08-11T13:47:34.540 回答