在后台线程上调用Application.DoEvents()有什么影响?

时间:2014-10-23 12:55:09

标签: c# multithreading .net-cf-3.5

正如问题所示:Application.DoEvents()在后台线程上调用时会做什么?

为了给出一些背景信息,我正在回顾C#中针对.NET CF编写的一个相当复杂的解决方案(不是我)。我审查它的原因是它有一些固有的问题,我被要求调查。

一个相当有趣的消息是应用程序在启动时创建一个长时间运行的后台线程,进入一个定时循环。它最终在每次循环迭代时调用Application.DoEvents()。

我无法弄清楚这会产生什么影响 - 它是否刷新了应用程序主线程上的消息队列?或者它是否在调用它的线程上刷新消息队列(即使后台线程没有队列要刷新)。

这几乎可以肯定是一些原因不明的应用程序行为的原因。

1 个答案:

答案 0 :(得分:4)

Application.DoEvents()处理当前在消息队列中的所有Windows消息,每个线程创建一个窗口。因此,如果您在“后台线程”上调用它,除非您在该线程上创建了一个窗口,否则它将不执行任何操作。