複数の呼び出しのWebBrowser.DocumentCompletedイベントを解決する方法



How Solve Webbrowser



転載:https://www.cnblogs.com/rchlz/archive/2009/02/27/1399274.html

DocumentCompletedイベントについては、ドキュメントが読み込まれた後にMSDNの説明が実行されますが、私のプログラムではDocumentCompletedが複数回呼び出され、統計を見ると、次のような状況が発生しています。



1、DocumentCompleted WebBrowserイベントは、ページのロード後に2回実行されますが、同じ状態ではなく、それぞれIntercativeとCompleteの2回ReadyStateが実行されます。 MSDNは、これら2つのステータス値について次のように説明しています。コントロールを完了すると、新しいドキュメントが完了し、すべてのコンテンツが読み込まれます。インタラクティブコントロールは、ハイパーリンクのクリックなど、制限されたユーザー操作を可能にするのに十分なドキュメントを読み込みました。したがって、各イベントのDocumentCompletedというファクトが1回呼び出され、状態とInteractive Complete状態のニーズに応じて、最終的にその時間が必要であると判断できます。ソリューションのサンプルコードは次のとおりです。

if(webBrowser1.ReadyState!=WebBrowserReadyState.Complete) return

2、ページに複数のフレームページが含まれている場合、各フレームでイベントをトリガーすることもありますDocumentCompletedページの読み込みが完了します(MSDN DocumentCompleteは、複数のフレームが複数回トリガーされる場合に説明を取得します。すべてのフレームワークがこのイベントをトリガーするわけではありません。ただし、各フレームがDownloadBeginイベントをトリガーすると、対応するDocumentCompleteイベントがトリガーされます)。この場合の解決策の例は次のとおりです。



if(e.Url.ToString()!=webBrowser1.Url.ToString()) return

さらに、MSDNの別の実施形態を考えると、以下を参照してください。

3、どちらの場合も、私は会っていませんが、3番目のケースを実行しました。対応するコードのDocumentCompletedイベントの実装では、結果がDocumentCompletedイベントをトリガーしたため、サイクルは無限になります。 webBrowser1.Stop()を使用してください。停止できませんでした。 webBrowser1.Nagviate( 'about:blank')の問題はまだ残っています。現時点では、DocumentCompletedイベントのみをアンインストールできます。つまり、DocumentCompletedインシデントで実行する必要のあるコードが完了した後、次の1つだけをアンインストールできます。

webBrowser1.DocumentCompleted -= new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted)