5

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

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

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

谢谢

编辑:

我通过完全删除 DoEvents() 解决了这个问题。我没有在工作时更改 DocumentText,而是设置了一个字符串生成器,然后在最后一次设置了 html。

4

2 回答 2

6

我建议你停止使用Application.DoEvents(),它产生的问题多于解决的问题。检查这个

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

于 2011-07-19T14:59:45.733 回答
0

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

于 2011-07-19T14:49:03.630 回答