我正在开发一个基于webBrowser控件的消息系统,以便我可以随心所欲地格式化文本。当用户离线并收到消息时,将存储这些消息,并在用户重新登录时为每条消息发送一个事件。当我为网站设置默认html之类的内容时,我通常使用:
while (this.webBrowser1.ReadyState != WebBrowserReadyState.Complete) Application.DoEvents();当程序正常运行时,这是有效的。当用户收到离线时发送的消息时,这将触发下一条消息事件,依此类推,直到最后一条消息。这意味着当他们离线时发送的最后一条消息是唯一显示的消息。我喜欢像Application.DoEvents()这样的东西,它允许控件保持更新和加载,但这不会触发其他事件。
谢谢
编辑:
我通过完全删除DoEvents()修复了这个问题。我没有在工作时更改DocumentText,而是设置了一个字符串构建器,然后在最后一次性设置所有html。
发布于 2011-07-19 22:59:46
我建议你停止使用Application.DoEvents(),它产生的问题多于解决的问题。检查this。
一种更好的方法是在加载完成时使用AutoResetEvent通知,或者在加载完成时引发事件。你也可以在另一个线程上运行你的等待,这样就不必使用Application.DoEvents()…
发布于 2011-07-19 22:49:04
您可以使用System.Threading.Thread.Join()作为DoEvents()的替代方法,因为此方法会暂停当前线程的执行,直到前面的调用线程完成执行。
https://stackoverflow.com/questions/6748702
复制相似问题