我正在开发一个基于webBrowser控件的消息传递系统,这样我就可以格式化文本了。当用户离线并发送消息时,将存储消息并在重新登录时为每条消息发送一个事件。当我为网站设置默认html等时,我通常会使用:
while (this.webBrowser1.ReadyState != WebBrowserReadyState.Complete) Application.DoEvents();
这在程序正常运行时有效。当用户正在接收他们离线时发送的消息时,这将触发下一个消息事件,依此类推,每个消息一直到最后一个消息。这意味着它们脱机时发送的最后一条消息是唯一显示的消息。我想像Application.DoEvents()这样的东西允许控件不断更新和加载,但这不会触发其他事件。
由于
编辑:
我通过完全删除DoEvents()来解决问题。我没有像我工作那样更改DocumentText,而是设置了一个字符串构建器,然后在最后一次设置html。
答案 0 :(得分:5)
我建议你停止使用Application.DoEvents()
,它会产生的问题超过它解决的问题。检查this。
更好的方法是使用AutoResetEvent
在加载完成时通知,或者在加载完成时引发事件。你也可以在另一个线程上运行等待,所以不必使用Application.DoEvents()
...
答案 1 :(得分:0)
您可以使用System.Threading.Thread.Join()作为DoEvents()的替代方法,因为此方法会暂停当前线程执行,直到前一个调用线程完成执行。