C# 无限载荷下的WebBrowser问题

C# 无限载荷下的WebBrowser问题,c#,browser,webbrowser-control,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 {

我有一个方法。您甚至可以测试它:

 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从未被激发过。但在网络浏览器中,我可以很容易地得到这个页面。
有人知道为什么吗?我应该怎么做才能得到一个HtmlDocument?

您可能有一个异常,它不是
UriFormatException
,所以 loadFinished总是错误的。然后无法访问
DocumentComplete


在此行的
Catch
中放置断点:
loadFinished=false
并检查引发的异常。

您可能遇到的异常不是
UriFormatException
,因此 loadFinished总是错误的。然后无法访问
DocumentComplete


在此行的
Catch
中放置断点:
loadFinished=false并检查引发了什么异常。

我认为您的委托放置不正确。您甚至没有获取此代理所需的参数。看看:


我认为您的代表的位置不正确。您甚至没有获取此代理所需的参数。看看:


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

此事件未触发的原因如下:

我不应该使用

Thread.Sleep(50);
因为该事件较早触发并释放了资源。所以线程在到达documentcompleted方法之前就被杀死了

如果我更改为:

Application.DoEvents();
它变成了完美的工作


谢谢你的回复

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

此事件未触发的原因如下:

我不应该使用

Thread.Sleep(50);
因为该事件较早触发并释放了资源。所以线程在到达documentcompleted方法之前就被杀死了

如果我更改为:

Application.DoEvents();
它变成了完美的工作

谢谢你的回复