我正在将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++的作用.
.NET等价物是Application.DoEvents()
.
消息泵是Win32消息传递系统,实际上是Windows本身的通信机制.如果移动鼠标,单击按钮等,将发送消息.一方(您的应用程序,Windows本身等)能够处理它,并处理下一条消息.消息泵不断发送放入队列的消息.
Application.DoEvents()
将为您的同步代码提供处理这些事件的机会,但最好使您的代码异步,这样就不会阻止UI线程,并且可以正常处理消息而不会有任何延迟.
Application.DoEvents()
除非你真的知道自己在做什么并且知道它会带来麻烦,否则不要使用.