我有一种方法。你甚至可以测试它:
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?
答案 0 :(得分:1)
这个事件没有解雇的原因:
我不应该使用
Thread.Sleep(50);
因为事件先前被解雇并释放了资源。所以线程在遇到文档完成方法之前就被杀死了。
如果我换了:
Application.DoEvents();
它变得完美无缺。
感谢您的回复!
答案 1 :(得分:0)
你可能有异常而不是UriFormatException
所以
loadFinished始终为false。然后无法联系DocumentComplete
在Catch
中添加一个断点:loadFinished = false;
并检查抛出的异常。
答案 2 :(得分:0)
我认为你的代表没有被正确放置。你甚至没有采用这个代表需要的参数。看看:
How to use WebBrowser control DocumentCompleted event in C#?