質問: ### 質問内容 Webbrowserでページを定期的に更新するようにしていますが、表示完了するまで待ちたいです。 下記にソースは記載しますが、このままですと無限ループになるので変えたほうが良いと回答されている記述をここで見かけました。 実際にはどのように記述することが良いのでしょうか。 ### 該当のソースコード 参考URL:https://web.biz-prog.net/fundamental/fundamental.html ``` try { //2秒間ほど待機 System.Threading.Thread.Sleep(2000); //読み込み完了まで待つ while (webBrowser1.IsBusy || webBrowser1.ReadyState != WebBrowserReadyState.Complete) { //無処理 System.Windows.Forms.Application.DoEvents(); System.Threading.Thread.Sleep(100); } return true; } catch (Exception ex) { return false; } ``` ### 試したこと ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど) OS:Windows7 開発環境:visualstudio 2017
回答: WebBrowserを使用する場合、Navigate後のページの読込完了はDocumentCompletedイベントで検知するのが一般的です。 ただし、そのページがフレーム構成(インラインフレームを含む)の場合、DocumentCompletedイベントが何度も発生する場合があります。 その場合、私はイベントハンドラの第2引数(WebBrowserDocumentCompletedEventArgs e)のUrlプロパティのUrl情報がナビゲートしたUrl(提示例ではWebBrowser1.Url)のそれと同じ場合、読込完了と判断しています。 詳細は、「WebBrowser DocumentCompleted」で検索すると色々な情報を得られます。 ### 参考 以下に参考となりそうな質問/回答がありましたので、よろしければご覧ください。