1

起動時に学校のネットワークにログインするための小さなプログラムを作成しようとしています。私の Web ブラウザーが未処理の例外をスローし始めた最近まで、すべてが正常に機能していました。これは私のコードです:

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 コントロールがドキュメントの読み込みを終了したときに発生するWebBrowser.DocumentCompletedイベントのハンドラーに置き換える必要があります。実行したいコードをそのイベント ハンドラー メソッドに配置します。

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 に答える