Application-> ProcessMessage有什么作用?

时间:2016-01-05 13:53:22

标签: c# c++

我正在将C ++应用程序转换为C#,我在代码库中的许多地方都遇到过这一行代码:

Application->ProcessMessages()

我找到了这个链接:http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/Forms_TApplication_ProcessMessages.html

其中说ProcessMessages()执行以下操作:

  

调用ProcessMessages以允许应用程序处理当前在消息队列中的消息。 ProcessMessages循环Windows消息循环,直到它为空,然后将控制权返回给应用程序。

但什么是“消息”,什么是“消息队列”?如何添加消息?进行了哪种处理?

我似乎无法找到任何具体的解释,这是什么,这很重要,因为我不知道这个方法调用的C#/ .NET等价物,还是它的某些形状的功能或者刚刚融入.NET,我不需要做任何事情?

使用C#标记了问题,因为我对它的.NET等价物最感兴趣,但该线程的真正意图仅仅是了解C ++的作用。

2 个答案:

答案 0 :(得分:7)

.NET等效项为Application.DoEvents()

消息泵是Win32 messaging system,它实际上是Windows本身的通信机制。如果移动鼠标,单击按钮等,将发送消息。一方(您的应用程序,Windows本身等)能够处理它,并处理下一条消息。消息泵不断发送通过队列中的消息。

Application.DoEvents()将为您的同步代码提供处理这些事件的机会,但最好使您的代码异步,这样UI线程就不会被阻止,并且可以毫不拖延地正常处理消息。

请不要使用Application.DoEvents(),除非您真的知道自己在做什么并know it can bring trouble

答案 1 :(得分:3)

ProcessMessage函数允许应用程序处理排队的Windows消息。

Windows通过消息工作,每个事件(鼠标移动,点击,按键,重绘等)都是发送到窗口的消息。 .net中的所有这一过程都是自动处理的,因此您不必担心为每个窗口编码WNDPROC

所以,我相信你会在繁重的工作循环中拥有这一行代码。为了什么?留出时间到界面刷新自己。

在.net中,您可以使用Application.DoEvents()函数,因为它会有效地调用ProcessMessages函数。 Source