Application.DoEvents()的替代方案

我正在开发一个基于webBrowser控件的消息传递系统,这样我就可以格式化文本了。 当用户离线并发送消息时,将存储消息并在重新登录时为每条消息发送事件。当我为网站设置默认html等时,我通常使用:

while (this.webBrowser1.ReadyState != WebBrowserReadyState.Complete) Application.DoEvents(); 

这在程序正常运行时有效。 当用户正在接收他们离线时发送的消息时,这会触发下一个消息事件,依此类推,每个消息都会触发,直到最后一个消息。 这意味着它们脱机时发送的最后一条消息是唯一显示的消息。 我想像Application.DoEvents()这样的东西允许控件不断更新和加载,但这不会触发其他事件。

谢谢

编辑:

我通过完全删除DoEvents()来解决问题。 我没有像我工作那样更改DocumentText,而是设置了一个字符串构建器,然后在最后设置html all。

我建议你停止使用Application.DoEvents() ,它会产生比它解决的问题更多的问题。 检查一下 。

更好的方法是使用AutoResetEvent在加载完成时通知,或者在加载完成时引发事件。 你也可以在另一个线程上运行等待,所以不必使用Application.DoEvents()

您可以使用System.Threading.Thread.Join()作为DoEvents()的替代方法,因为此方法会暂停当前的线程执行,直到前一个调用线程完成执行。