WebBrowser问题无限加载

时间:2011-03-24 08:17:22

标签: c# browser webbrowser-control

我有一种方法。你甚至可以测试它:

 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,而是进入了无限循环:

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

似乎DocumentCompleted永远不会被解雇。但在Web浏览器中,我可以轻松获取此页面。 谁知道为什么?我该怎么做才能获得HtmlDocument?

3 个答案:

答案 0 :(得分:1)

对不起,对不起。在发布此主题后,我找到了一个解决方案:

这个事件没有解雇的原因:

我不应该使用

Thread.Sleep(50);

因为事件先前被解雇并释放了资源。所以线程在遇到文档完成方法之前就被杀死了。

如果我换了:

Application.DoEvents();

它变得完美无缺。

感谢您的回复!

答案 1 :(得分:0)

你可能有异常而不是UriFormatException所以 loadFinished始终为false。然后无法联系DocumentCompleteCatch中添加一个断点:loadFinished = false;并检查抛出的异常。

答案 2 :(得分:0)

我认为你的代表没有被正确放置。你甚至没有采用这个代表需要的参数。看看:

How to use WebBrowser control DocumentCompleted event in C#?