0

私が書いているプログラムで使用するために要素を切り離している Web ページがあります。特定の要素が Web ページにロードされるまで少し時間がかかるため、WebBrowser.Refresh()最新のコードを取得するために を使用すると考えました。残念ながら、イベントが発生しないため、後で何かをしたい場合は、これを行うとかなりの頭痛の種になりますDocumentCompleted(誰かが尋ねる前に、MSDN で明示的に言うことさえあります)。

したがって、ページを更新した後、プログラムが 2 秒間何もしないようにする方法が必要です。問題は、それを行う方法がわからず、更新された を入手できないことWebBrowser.Documentです。Thread.Sleep を使用すると、スリープ中にアプリケーション全体がハングし、何も更新されません。

そして、すぐに試してみると、WebBrowser オブジェクトが永久にハングアップしたり、Null Cast 例外をスローしたりするという厄介な厄介な問題が常に発生します。

他の誰かがこの種の問題 (または同様の問題) を抱えていて、解決策を見つけましたか?

4

3 に答える 3

1

もう一度 URL に移動してみませんか?

   webBrowser1.Navigate(webBrowser1.Url);

これにより、必要なイベント ハンドラーが起動されます。

于 2013-01-29T23:28:29.833 に答える
0

希望の時間にリフレッシュする際にも同様の問題がありました。WebBrowserあなたが発見しているように、オンデマンドで更新しようとするのは絶望的です。HTTP 応答と HTML レンダリングはどちらも非決定論的です。

私のアドバイスは、 のDocumentCompletedイベントにアタッチしWebBrowser、目的の Web ページをバックグラウンドで早い段階で呼び出し、ユーザーの注意をそらすものを表示してから、起動WebBrowser後に完了を表示することDocumentCompletedです。

于 2013-01-29T23:28:01.193 に答える
0

バックグラウンド スレッドを使用せずに怠けたい場合は、次のようにします。

wb.Refresh();
while ((wb.ReadyState != WebBrowserReadyState.Complete)) {
    Application.DoEvents();
}
//Refresh is now complete

ReadyStateWebBrowserReadyState.Completeすべての Ajax とコンテンツの読み込みが完了したときにのみ実行する必要があります。

于 2013-01-30T15:56:36.207 に答える