在等待WebBrowser完成加载时出现Application.DoEvents()问题

时间:2011-07-22 19:30:36

标签: c# browser innerhtml doevents readystate

我正在尝试加载WebBrowser内容,之后我想添加一些文本并滚动到底部。

以下是我的代码示例:

webBrowser1.Url = new System.Uri("file:///" + filePath);
webBrowser1.Document.Body.InnerHtml += text;
webBrowser1.Document.Body.ScrollTop = webBrowser1.Document.Body.ScrollRectangle.Height;

当我运行它时,有一个未处理的异常“对象引用未设置为对象的实例”。或者,当我评论进行滚动的行时,文本将添加到WebBrowser的先前内容中,然后导航到新内容。

所以在我的示例代码的第一行之后我放了:

while (webBrowser1.ReadyState != WebBrowserReadyState.Complete) Application.DoEvents();
但它会弄乱一切。我的应用程序正在做一些非常奇怪的事情,例如多次调用相同的方法,应该调用一次。

有没有解决方案?

2 个答案:

答案 0 :(得分:7)

我认为您确实想订阅DocumentCompleted活动 Application.DoEvents仅处理挂起的Windows消息循环项。

在任何一种情况下,请确保在使用之前了解possible drawbacks的{{3}}。

答案 1 :(得分:2)

DoEvents()在这里是一个糟糕的解决方案。您应该使用显式线程或BackgroundWorker来加载页面并保留UI线程来处理其他内容。

相关问题