Функция .NET webbrowser.stop () запускает событие DocumentCompleted? - PullRequest
1 голос
/ 19 марта 2012

Я использую элемент управления веб-браузера .NET для открытия стопок URL-адресов, и цикл вызывается в событии DocumentCompleted.

Теперь я хочу контролировать тайм-аут. Поэтому я использую таймер, и по истечении тайм-аута он останавливает браузер с помощью функции stop ().

Вопрос: кажется, что функция stop запускает событие DocumentCompleted иногда . Так что если таймер вызывает следующий цикл после остановки веб-браузера, возникает ошибка. И если он не вызывает следующий цикл, иногда цикл будет остановлен в середине.

Процедура, подобная этой (не относящиеся коды удаляются):

private string[] urls;//urls are stored here
private int index = 0;//next url index
private void loopFunc()
{
    timer.Enabled = true;
    wb.navigate(urls[index]);
    index++;
    return;
}

private void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    loopFunc();
}

private void timer1_Tick(object sender, EventArgs e)
{
    wb.stop();
    //loopFunc() or not?
}

Я точно не знаю, запускает ли это событие или нет, и через Google ничего не нашел.

1 Ответ

2 голосов
/ 19 марта 2012

Если бы я ясно понял вашу ситуацию, это могло бы решить вашу проблему:

Timer On --->  loopFunc() --> goto url --> oncomplete -> start timer again -->
                  |
                  |---> Stop timer so it doesn't call loopFunc again

Так что остановите таймер после loopFunc, когда загрузка завершится, снова будет вызван loopFunc:

private void loopFunc()
{
    timer.Enabled = true;
    wb.navigate(urls[index]);
    index++;
    timer.stop(); //<<<<<
    return;
}

И ваш тик должен быть:

private void timer1_Tick(object sender, EventArgs e)
{
  loopFunc();
}

Затем снова запустите таймер при заполнении документа:

private void wb_DocumentCompleted(object sender, 
                  WebBrowserDocumentCompletedEventArgs e)
{
 wb.Stop();
 timer.Start();
}
...