我正在将C ++应用程序转换为C#,我在代码库中的许多地方都遇到过这一行代码:
Application->ProcessMessages()
其中说ProcessMessages()
执行以下操作:
调用ProcessMessages以允许应用程序处理当前在消息队列中的消息。 ProcessMessages循环Windows消息循环,直到它为空,然后将控制权返回给应用程序。
但什么是“消息”,什么是“消息队列”?如何添加消息?进行了哪种处理?
我似乎无法找到任何具体的解释,这是什么,这很重要,因为我不知道这个方法调用的C#/ .NET等价物,还是它的某些形状的功能或者刚刚融入.NET,我不需要做任何事情?
使用C#标记了问题,因为我对它的.NET等价物最感兴趣,但该线程的真正意图仅仅是了解C ++的作用。
答案 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