プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (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」に書き替えてたらどうなるかな?

プログラムは「アルゴリズムを理解してから」書こうね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!