gpt4 book ai didi

c# - 只有一个 "message pump"还是很多?

转载 作者:太空狗 更新时间:2023-10-30 00:04:17 32 4
gpt4 key购买 nike

我是 .NET 的新手和 Windows,我正在尝试弄清楚如何将遗留代码集成到我的 C# 项目中。拥有代码的人说他只需要“消息泵”和“空闲处理”。

谷歌搜索后,听起来至少 MFC , Windows FormsWin32都有自己的消息泵?这是真的吗?

我的 C# 代码是一个控制台应用程序,据我所知根本没有任何消息泵。我以为那些只是 GUI 的东西(?)。

那么,当他说他需要“消息泵”时,我需要在我的 C# 代码中做什么才能使他的旧代码正常工作?

我需要使用的代码已经在一个 GUI 应用程序中使用过。现在我需要在服务器中使用它,并且对需要 GUI 消息泵感到有点害怕。我的代码是纯 C#,里面根本没有任何 GUI 的东西。只是一些数字运算和 I/O。

最佳答案

让我先了解一下消息和消息泵的背景知识。

在 Windows 中,GUI 应用程序通过处理消息来工作。例如,当您移动鼠标时,Windows 会向鼠标下方的窗口发送 WM_MOUSEMOVE 消息。

Windows 将消息发送到窗口所属线程的“消息队列”,并且必须有人将此消息路由到特定窗口。那个人就是消息泵。

每个 Windows UI 框架都有一个消息泵,最简单的消息泵如下所示(此代码示例使用 C++;您可以使用 interop 在 .NET 中编写它):

MSG msg;
while(GetMessage(&msg, hwnd, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

每个 GUI 程序都必须有一个消息泵,但是命令行程序只需运行上面的代码就可以启动消息泵。显然,由于您没有打开的窗口,因此您不会从操作系统收到任何消息。要将消息插入队列,请使用 PostThreadMessage。

关于c# - 只有一个 "message pump"还是很多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/974567/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com