DOBON.NET DOBON.NETプログラミング掲示板過去ログ

WebBrowser.IsBusyの使い方がわからない

環境/言語:[win2000pro .NET Framework2.0 C#2.0]
分類:[.NET]

度々失礼します。
WebBrowserコントロールのIsBusyプロパティを使って
ドキュメントの読み込み中を判定したいのですが、
以下のようにやっても機能しません。
どうやらループ中に一度も入っていっていないようなのです。

WebBrowser1.Navigate("http://www.example.com/");

while (WebBrowser1.IsBusy == true) {
Console.Write("busy");
}

//読み込みが完了したドキュメントに対する操作

ヘルプを見ても、IsBusyは読み込み中ならtrueを返すと
なっていて、どこがおかしいのかわかりません。

フラグを用意して、WebBrowser1_DocumentCompletedイベントで
フラグをオンにしてそれをループ中で判定するというやり方で
一応やりたいことは出来たのですが・・・
IsBusyを使って読み込み中の判定を行うにはどうすればよいのでしょうか?
> IsBusyを使って読み込み中の判定を行うにはどうすればよいのでしょうか?
webBrowser1.Navigateをして直ぐには、webBrowser1.IsBusy == true にはならないようです。
経験的に、
      do
      {
          Console.Write("busy");
          Application.DoEvents();
      } while (webBrowser1.IsBusy == true);
とすれば良いようですが、安全を期して
      while (webBrowser1.IsBusy == true || webBrowser1.ReadyState != WebBrowserReadyState.Complete)
      {
          Console.Write("busy");
          Application.DoEvents();
      }
とした方が良いでしょう。
我龍院忠太さんありがとうございます。
ローカルでwebサーバーを稼動して単純に3秒スリープしてから
テキストを表示するcgiを作成してそれにアクセスして実験してみました。

> do
> {
> Console.Write("busy");
> Application.DoEvents();
> } while (webBrowser1.IsBusy == true);
Console.Write("free");
このやり方ではdoループの中は一回しか回りませんでした。
ドキュメントがまだ表示されていないにもかかわらず
freeと表示されてしまいました。

> とすれば良いようですが、安全を期して
> while (webBrowser1.IsBusy == true || webBrowser1.ReadyState != WebBrowserReadyState.Complete)
> {
> Console.Write("busy");
> Application.DoEvents();
> }
> とした方が良いでしょう。

ありがとうございます。こちらのやり方で無事目的が果たせました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板