- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在将 C++ 应用程序转换为 C#,我在代码库的许多地方都遇到过这一行代码:
Application->ProcessMessages()
ProcessMessages()
执行以下操作:
Call ProcessMessages to permit the application to process messages that are currently in the message queue. ProcessMessages cycles the Windows message loop until it is empty, and then returns control to the application.
但是什么是“消息”,什么是“消息队列”呢?如何添加消息?做了什么样的处理?
我似乎找不到任何具体的解释来解释它的作用,这很重要,因为我不知道这个方法调用的 C#/.NET 等价物是什么,或者它是否具有某种形式的功能或者只是融入 .NET 而我不需要做任何事情的方式?
用 C# 标记的问题,因为我最好奇它的 .NET 等价物,但该线程的真正意图只是了解它在 C++ 方面的作用。
最佳答案
.NET 等效项是 Application.DoEvents()
.
消息泵是 Win32 messaging system那其实就是Windows本身的通信机制。如果您移动鼠标、单击按钮等,则会发送一条消息。一方(您的应用程序、Windows 本身等)能够处理它,并处理下一条消息。消息泵不断发送队列中的消息。
Application.DoEvents()
将为您的同步代码提供处理这些事件的机会,但最好让您的代码异步,这样 UI 线程就不会被阻塞,并且可以发送消息正常处理,及时处理。
不要使用 Application.DoEvents()
,除非您真的知道自己在做什么并且 know it can bring trouble .
关于c# - Application->ProcessMessage 是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34613362/
我创建了一个组件,该组件将硬件加速渲染器嵌入到 TWinControl 中,以便您可以将其放置在表单上。它在大多数情况下工作得很好,但如果我尝试调整控件的大小,一切都会变成空白,直到消息循环运行并调用
我需要知道使用允许我使用整个应用程序的 ProcessMessages 是否合法。 伪代码: 主线程按钮调用 - 搜索。 procedure ButtonOnClick; begin var1
我正在编写在C++ Builder项目中使用的网络DLL。该DLL与远程FTP服务器一起使用。调用recv()时,我注意到一个奇怪的行为。有时它返回0。但是在另一个线程中,在同一套接字上调用recv(
有一个 MessageListener 监听来自用户 A 的 processMessage,当 sendMsg 从另一个用户发送到用户 A 时,我看到 processMessage 被调用两次: pu
我有一个应用程序,我将表单用作消息框,在这个“消息框”中,我运行线程来更改其上的消息线程完成后,在消息框上我显示按钮,只有在单击按钮代码后才能继续 var FStart: TFStart; V
我的单线程delphi 2009应用程序(尚未完成)已经开始出现Application.ProcessMessages挂起的问题。我的应用程序有一个 TTimer 对象,每 100 毫秒触发一次以轮询
我有以下代码,它正确在消息框中显示InvoicingUnit。它还可以正确显示标题中的值。 ADItemRecord := GetInvItemRecord(txtItemCode.Text);
使用 TWebBrowser 的示例代码通常会插入一个循环来调用 Application.ProcessMessages,直到 ReadyState 为 READYSTATE_LOADED。 例如,来
我想将一个 div 降低到一定高度以显示一些额外的内容。为此,我编写了以下 dropbox() 函数: function sleep(milliseconds) { var
我的 Cordova 应用程序未在浏览器和移动设备中运行,它显示错误 processMessage failed 截图: 然后进入无限循环并卡住设备任何解决方案? 这个问题已经在这里问了Cordova
我正在将 C++ 应用程序转换为 C#,我在代码库的许多地方都遇到过这一行代码: Application->ProcessMessages() 我找到了这个链接:http://docs.embarca
我带着另一个关于线程和同步的问题回来了。想象一个服务器应用程序必须执行一个冗长的操作,并且客户端希望他的 GUI 在他等待服务器响应时保持响应。我想到了以下模式: TMonitor.Enter (FT
Application.ProcessMessages 命令是众所周知的,我在长进程中使用它来确保我的程序不会占用计算机。 但是我有一组相当快的处理,我将 View 缓冲到文件中。在缓冲过程中,可能会
我有一个可以运行很长时间扫描数据库的应用程序。 在此过程中,我使用 processmessage 保持程序响应。 当我的进度条更新并增加时,会触发此进程消息。 在大多数情况下,这工作得很好,但是当数据
在线程(不是主线程)内调用 Application.Processmessages 是否“可以”,还是我应该预料到麻烦? 最佳答案 TApplication.ProcessMessages() 主要用
我这里有一个遗留应用程序,它有一些“耗时”的循环,这些循环由于各种用户交互而被触发。耗时的代码定期更新屏幕上的某些内容以及进度信息(通常是标签),然后,似乎是为了说服视觉刷新立即发生,代码调用 App
我正在使用 Delphi 7。我试图在非 VCL 单元中添加一个调用“application.processmessages”的过程。我收到错误“未声明的标识符:应用程序”。 如何从非 vcl 单元引
在维护旧产品时,我遇到了一个错误,该错误导致屏幕上充满了数百个消息框,上面写着“C++ 异常”,没有其他任何内容。我将问题追溯到以下行: Application->ProcessMessages();
我正在使用 c++ builder (bcb6) 和 on: FormShow 事件有: Application->ProcessMessages 我想知 Prop 体责任是什么: Applic
我需要一种方法来暂停函数的执行几秒钟。我知道我可以使用 sleep 方法来做到这一点,但这种方法在执行时会“卡住”应用程序。我也知道我可以使用类似下面的代码来避免卡住: // sleeps for 5
我是一名优秀的程序员,十分优秀!