While True
Application.DoEvents()
System.Threading.Thread.Sleep(500)
End While
如果我运行这个,我会观察每500毫秒表单处理用户事件的预期行为。我从文档中了解到,每次调用DoEvents()时都会处理消息队列。
我不理解的是这个处理适合.NET的线程模型。作为调用DoEvents()的结果是否必然发生在UI线程上?如果从UI线程以外的其他线程调用DoEvents()呢?
答案 0 :(得分:1)
它使应用程序能够听到'任何事件(如Esc
键等)并对这些中断采取措施。
因此,有时长循环可能会冻结用户与应用程序中所有内容的交互性,并且可能无法访问。其他依赖于MouseOver
等事件的内部代码可能不会被困住。
此行将类似于循环的安全阀,使其能够减速并检查执行之间的事件。然而,这确实会使循环变慢,所以应该每次都使用它。在长循环的情况下迭代。