- 締切済み
C#でブラウザのタイムアウト処理
Visual C# 2008 Expressで.NET Frameworkアプリケーションの勉強をしています。 今回、テキストファイルに書かれたURLリストを巡回するブラウザを作成しているのですが、サイトの読み込み完了に時間がかかり、途中で停止してしまう現象に悩まされています。 ソースは以下のようになっています。 string[] tempLine = File.ReadAllLines("list.txt", System.Text.Encoding.GetEncoding("Shift_JIS")); foreach (string temp in tempLine) { webBrowser1.Navigate(temp); //読み込みが完了するまで待つ while (webBrowser1.IsBusy == true || webBrowser1.ReadyState != WebBrowserReadyState.Complete) { //読み込み完了後、5秒まってから次に移動する System.Threading.Thread.Sleep(5000); System.Windows.Forms.Application.DoEvents(); } } アクセスして10秒以上たっても読み込みが完了しない場合、次のURLに飛ぶという処理を追加したいのですが、どのようにやったものか悩んでいます。 ご助言を頂ければと思います。よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- chie65536(@chie65535)
- ベストアンサー率44% (8753/19861)
>アクセスして10秒以上たっても読み込みが完了しない場合、次のURLに飛ぶという処理を追加したいのですが >//読み込みが完了するまで待つ >while (webBrowser1.IsBusy == true || webBrowser1.ReadyState != WebBrowserReadyState.Complete) >{ この「読み込みが完了するまで待つ」をやめれば? whileループなんかにするから「未完了の場合は、ずっとSleep(5000)とDoEvents()を繰り返して、相手先が無反応だと、永久に待ち続けてしまう」っての、理解してる? ぶっちゃけ「読みこんで、完了してなかったら、10秒待って次に行く」ってやれば良いんじゃないの? while (webBrowser1.IsBusy == true || webBrowser1.ReadyState != WebBrowserReadyState.Complete) の「while」を「if」に書き替えて System.Threading.Thread.Sleep(5000); の「5000」を「10000」に書き替えてたらどうなるかな? プログラムは「アルゴリズムを理解してから」書こうね。