Проблема WebBrowser бесконечная загрузка - PullRequest
1 голос
/ 24 марта 2011

У меня есть один метод.Вы даже можете проверить это:

 private readonly 
    public HtmlDocument Browse()
    {
        var _browser = new WebBrowser();
        var link = "http://hotline.ua/sr/?q=allo";
        var loadFinished = false;

        _browser.DocumentCompleted += delegate { loadFinished = true; };
        try
        {
            _browser.Navigate(link);
        }
        catch (Exception xx)
        {
            if (!(xx is UriFormatException))
                throw;

            loadFinished = false;
        }

        while ( ! loadFinished  )
            Thread.Sleep(50);

        loadFinished = false;

        return _browser.Document;
    }

Затем где-то в коде я вызываю этот метод:

var doc = Browse();

Вместо получения HtmlDocument я получаю бесконечный цикл в:1008 *

Кажется, что DocumentCompleted никогда не запускается.Но в веб-браузере я могу легко получить эту страницу.Кто-нибудь знает почему?И что я должен сделать, чтобы получить HtmlDocument?

Ответы [ 3 ]

1 голос
/ 24 марта 2011

Ой, прости.Я нашел решение после публикации этой темы:

Вот причина, по которой это событие не сработало:

Я не должен использовать

Thread.Sleep(50);

Поскольку событие сработало раньшеи освобожденные ресурсы.Таким образом, поток уничтожается до того, как он попадает в метод завершения документа.

Если я поменяю на:

Application.DoEvents();

Он станет отлично работать.

Спасибо за ваши ответы!

0 голосов
/ 24 марта 2011

Не думаю, что ваш делегат правильно расположен.Вы даже не берете параметры, которые нужны этому делегату.Взгляните на:

Как использовать элемент управления WebBrowser DocumentCompleted в C #?

0 голосов
/ 24 марта 2011

Возможно, у вас есть исключение, отличное от UriFormatException, поэтому loadFinished всегда имеет значение false.Тогда DocumentComplete не может быть достигнуто.
Поместите точку останова в Catch в этой строке: loadFinished = false; и проверьте, какое исключение выдается.

...