• 締切済み

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に飛ぶという処理を追加したいのですが、どのようにやったものか悩んでいます。 ご助言を頂ければと思います。よろしくお願いします。

みんなの回答

回答No.1

>アクセスして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」に書き替えてたらどうなるかな? プログラムは「アルゴリズムを理解してから」書こうね。

関連するQ&A

専門家に質問してみよう