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();
它变成了完美的工作
谢谢你的回复