在后台线程上调用Application.DoEvents()会产生什么效果
本文关键字:什么 线程 后台 调用 DoEvents Application | 更新日期: 2023-09-27 18:27:30
正如问题所问:Application.DoEvents()在后台线程上调用时会做什么?
为了提供一些上下文,我正在回顾一个相当复杂的解决方案,该解决方案是用C#为.NET CF编写的(不是我自己编写的)。我之所以审查它,是因为它有一些固有的问题,我被要求调查。
一个相当有趣的花絮是,该应用程序在启动时创建了一个长时间运行的后台线程,该线程进入定时循环。它最终在每个循环迭代中调用Application.DoEvents()。
我不太清楚这会有什么影响——它会刷新应用程序主线程上的消息队列吗?或者它会刷新被调用线程上的消息队列吗(即使后台线程没有队列要刷新)。
几乎可以肯定,这是一些无法解释的应用程序行为的原因。
Application.DoEvents()处理当前消息队列中的所有Windows消息,消息队列是每个创建窗口的线程一条消息。因此,如果你在"后台线程"上调用它,除非你在该线程上创建了一个窗口,否则它什么都不会做。