Лучший способ сделать это без блокировки потока пользовательского интерфейса - использовать Async и Await, представленные в .net 4.5.
Вы можете вставить это в свой код, просто измените Браузер на имя вашего веб-браузера.
Таким образом, ваш поток ожидает загрузки страницы, если он не загружается вовремя, он перестает ждать и ваш код продолжает работать:
private async Task PageLoad(int TimeOut)
{
TaskCompletionSource<bool> PageLoaded = null;
PageLoaded = new TaskCompletionSource<bool>();
int TimeElapsed = 0;
Browser.DocumentCompleted += (s, e) =>
{
if (Browser.ReadyState != WebBrowserReadyState.Complete) return;
if (PageLoaded.Task.IsCompleted) return; PageLoaded.SetResult(true);
};
//
while (PageLoaded.Task.Status != TaskStatus.RanToCompletion)
{
await Task.Delay(10);//interval of 10 ms worked good for me
TimeElapsed++;
if (TimeElapsed >= TimeOut * 100) PageLoaded.TrySetResult(true);
}
}
И вы можете использовать его, например, в асинхронном методе или в событии нажатия кнопки, просто сделайте его асинхронным:
private async void Button1_Click(object sender, EventArgs e)
{
Browser.Navigate("www.example.com");
await PageLoad(10);//await for page to load, timeout 10 seconds.
//your code will run after the page loaded or timeout.
}