Эта проблема вызвана циклом .Навигация в веб-браузере может быть завершена только, а событие DocumentCompleted может сработать только тогда, когда ваш поток пользовательского интерфейса снова простаивает.Это является основой работы многопоточных компонентов, они могут запускать свое событие «работа выполнена» в потоке пользовательского интерфейса только тогда, когда поток пользовательского интерфейса простаивает и выполняет цикл обработки сообщений.Например, к классу BackgroundWorker предъявляются те же требования.
Чтобы решить эту проблему, нужно создать конечный автомат.Вы запускаете его, предлагая браузеру перейти к первому URL.Вы позволяете обработчику событий DocumentCompleted обрабатывать ответ, а затем сообщаете браузеру перейти к следующему URL-адресу.Или остановите, когда больше нет URL для обработки.
Неправильный способ - вызвать Application.DoEvents () в цикле.Это прокачивает цикл сообщений и позволяет событиям срабатывать.Но это очень опасная вещь, DoEvents () не избирательно определяет, что обрабатывается событий.Обязательно прочитайте этот ответ , если вы все равно планируете его использовать.
Следующий путь - это предстоящая поддержка асинхронных и ожидающих ключевых слов в следующей версии C #.В настоящее время доступны в ОСАГО .