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

alc*_*vil 2 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;
Run Code Online (Sandbox Code Playgroud)

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

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

while (webBrowser1.ReadyState != WebBrowserReadyState.Complete) Application.DoEvents();
Run Code Online (Sandbox Code Playgroud)

但它搞砸了一切.我的应用程序正在做一些非常奇怪的事情,例如,当它应该被调用一次时,多次调用相同的方法.

有什么解决方案吗?

Dan*_*mov 7

我想你真的想订阅DocumentCompleted活动.
Application.DoEvents仅处理挂起的Windows消息循环项.

在任何一种情况下,请确保您在使用之前了解调用的可能缺点DoEvents.

  • 是的,并且该处理可能导致重入问题,"StackOverflowException"(如果DoEvents将调用再次调用DoEvents的方法)和其他有趣的东西.在调用它之前,最好确定你是否理解`DoEvents`的工作原理. (3认同)