2013-08-11 5 views
1

시작할 때 학교 네트워크에 로그인 할 수있는 작은 프로그램을 작성하려고합니다. 최근까지 웹 브라우저가 처리되지 않은 예외를 던지기 전까지는 모든 것이 잘 작동했습니다. 이건 내 코드입니다 :WebBrowser에서 처리되지 않은 예외가 발생했습니다.

WebBrowser1.Navigate("url") 

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

오류가

비주얼 스튜디오 내가이 예외가 슬로우되지 않는 것으로 나타났습니다 제거 된 객체

에 액세스 할 수 없다는, while 루프에서 발생합니다 폼의 불투명도가 100 %로 설정된 경우. 불투명도를 100 % 미만으로 설정하면 예외가 발생합니다. 그러나 불투명도를 100 %로 설정하면 프로그램에서 다른 이유로 많은 오류가 발생합니다.

이 문제의 원인은 무엇입니까? WebBrowser는 이와 같은 탐색을 제외하고는 런타임 중에 전혀 건드리지 않았으며 확실히 제거하지 않았습니다.

+0

등이 이벤트와 함께 제공되는 URL을 확인로드 된 모든 페이지가 있는지 확인하기 위해 한 번 이상 무엇 While 루프의 목적은 무엇입니까? –

+0

나머지 코드를 실행하기 전에 브라우저가 탐색을 완료 할 때까지 기다리는 중입니다. –

+0

오류 메시지를 정확하게 인용하지 않았습니다. 내 생각 엔이 실제로는 ObjectDisposedException입니다. DoEvents()를 사용할 때 실제로 * 매우 * 일반적인 예외의 종류. DoEvents를 사용하지 말고 대신 DocumentCompleted 이벤트를 사용하십시오. –

답변

1

Application.DoEvents()은 모든 종류의 문제를 일으 킵니다. 당신은 그것을 사용해서는 안됩니다.

나의 원래 본능은 목적을 달성하지 못했기 때문에 While 루프를 완전히 제거하는 것이 었습니다. 하지만 나머지 코드를 실행하기 전에 브라우저가 탐색을 완료 할 때까지 기다리는 것이 좋습니다. " 이 경우 여전히 꺼내야하지만 WebBrowser 컨트롤이 문서로드를 완료 할 때 발생하는 WebBrowser.DocumentCompleted event에 대한 처리기로 바꿔야합니다. 해당 이벤트 핸들러 메서드에서 실행할 코드를 배치하십시오.

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 
+0

나는이 코드를 사용했지만 로그인 할 때 매우 자주 내 코드에서 기다릴 필요가 있다는 것을 발견했다. 그래서 DoEvents를 처음부터 도입했다. 내 프로그램에서 여러 다른 코드를 여러 번 실행합니다.이 방법은 단순히 완전히 만족스럽지 않습니다. –

+0

이벤트는 @Viktor과 정확히 일치합니다. 어떤 부분이 만족스럽지 않았습니까? –

+0

한 곳으로 이동하고, 텍스트를 입력/전송하고, 다른 곳으로 이동하고, 텍스트를 입력하고, 마지막 페이지로 이동하고 마지막으로 탐색해야한다고 가정 해보십시오. 단일 이벤트 핸들러에이를 어떻게 추가합니까? –

0

당신은 downloadcompleted 이벤트에주의를 기울여야한다 그것이 화재의 그래서 당신은 실제로

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 
관련 문제