我试图写一个小程序,让我在启动时登录我校的网络。直到最近,当我的网络浏览器开始抛出未处理的异常时,一切正常。这是我的代码:
WebBrowser1.Navigate("url")
While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
Application.DoEvents()
End While
在while循环中抛出错误,说明
Visual Studio无法访问已删除的对象
我注意到,如果窗体的不透明度设置为100%,则不会抛出此异常。任何不透明度设置低于100%都会导致异常。但是,由于某种原因,将不透明度设置为100%会导致程序中出现许多其他错误。
造成这种情况的原因是什么?除了像这样的导航之外,在运行时根本没有触及WebBrowser,我当然没有删除它。
答案 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