0

これを自動化して、1つのページに移動し、ロードしてコードを実行し、次のページに移動して、コードをロードして実行できるようにしたいと考えています。現在、タイマーを使用していますが、ページが読み込まれるのを待つほど効率的ではないようです。これがうまくいくと思ったのですが、最後のサイトに移動してからロードします。

私のアプローチはおそらく間違っているので、誰かが私を正しい方向に向けてくれることを望んでいました。

ありがとうございました。

private void button1_Click(object sender, EventArgs e)
{
    string url1 = "http://google.com";
    string url2 = "http://yahoo.com";
    string url3 = "http://msn.com";

    webBrowser1.Navigate(url1);
    webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
    webBrowser1.Navigate(url2);
    webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
    webBrowser1.Navigate(url3);
    webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
}
4

2 に答える 2

3

ページ読み込みイベントごとに異なるイベント ハンドラーは必要ありません。ロードしたいページを格納するためのスタック/キューを作成するだけです:

Queue<string> pagesToLoad = new Queue<string>();

private void Button1_Click(object sender, EventArgs e)
{
    pagesToLoad.Enqueue("http://www.test.com");
    pagesToLoad.Enqueue("http://www.test2.com");
    pagesToLoad.Enqueue("http://www.test3.com");

    webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;
    webBrowser1.Navigate("http://www.first.com");
}

次に、イベント ハンドラー メソッドを記述します。ブラウザーがページの読み込みを完了すると、このメソッドが呼び出されます。その中でコードを実行し、準備ができたら次のページに移動できます。

webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    // TODO: do whatever you want with the page you just loaded
    // You can get the page URL with e.Url

    // Get the next Url from the queue and navigate:
    if (pagesToLoad.Count == 0) 
    {
        return; // Finished!
    }
    else
    {
        string nextUrl = pagesToLoad.Dequeue();
        webBrowser1.Navigate(nextUrl);
    }
}    

それでおしまい。

于 2012-06-20T17:26:24.410 に答える
2

最初のページが完了するのを待ってから次のページを開始する必要がある場合はDocumentCompleted、前の URL でイベントが発生するまで待って、ナビゲーションを順番にチェーンする必要があります。

private void button1_Click(object sender, EventArgs e)
{
    webBrowser1.DocumentCompleted += OnGoogleCompleted;

    webBrowser1.Navigate("http://google.com");
}

private void OnGoogleCompleted(object sender, EventArgs e)
{
    webBrowser1.DocumentCompleted -= OnGoogleCompleted;
    webBrowser1.DocumentCompleted += OnYahooCompleted;

    webBrowser1.Navigate("http://yahoo.com");
}

private void OnYahooCompleted(object sender, EventArgs e)
{
    webBrowser1.DocumentCompleted -= OnYahooCompleted;
    webBrowser1.DocumentCompleted += OnMsnCompleted;

    webBrowser1.Navigate("http://msn.com");
}

private void OnMsnCompleted(object sender, EventArgs e)
{
    // ...
}
于 2012-06-20T17:16:40.997 に答える