什么是Application.DoEvents()呢?

时间:2014-07-08 23:46:16

标签: vb.net multithreading winforms

While True
   Application.DoEvents()
   System.Threading.Thread.Sleep(500)
End While

如果我运行这个,我会观察每500毫秒表单处理用户事件的预期行为。我从文档中了解到,每次调用DoEvents()时都会处理消息队列。

我不理解的是这个处理适合.NET的线程模型。作为调用DoEvents()的结果是否必然发生在UI线程上?如果从UI线程以外的其他线程调用DoEvents()呢?

1 个答案:

答案 0 :(得分:1)

它使应用程序能够听到'任何事件(如Esc键等)并对这些中断采取措施。

因此,有时长循环可能会冻结用户与应用程序中所有内容的交互性,并且可能无法访问。其他依赖于MouseOver等事件的内部代码可能不会被困住。

此行将类似于循环的安全阀,使其能够减速并检查执行之间的事件。然而,这确实会使循环变慢,所以应该每次都使用它。在长循环的情况下迭代。