请参阅 MSDN 中的“使用消息和消息队列”主题(在 Win32 和 COM 开发 > 用户界面 > Windows 用户体验 > Windows 管理 > Windows 用户界面 > 窗口 > 消息和消息队列下;您可能需要查看同一节中的其他文章和示例)。快速总结,省略错误处理并使用 C 语法而不是 C#,原因如下所述:
RegisterClass(...);
CreateWindow(...);
ShowWindow(...); // probably not in your case
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
从窗口设置样板中可以看出,这仍然依赖于“静默窗口”,尽管它是通过 Win32 API 而不是通过 WinForms 创建和发送消息的。所以你这样做并没有真正获得任何东西。因此,我觉得将这些东西翻译成 C# 并没有多大意义——如果您的问题的唯一解决方案是一个不可见的窗口,那么您不妨使用一个不可见的 Windows 窗体以及该平台附带的所有友好包装器。
但是,如果您实际上没有像链接问题的海报那样使用 Windows 窗体控件,那么您可以很高兴地在控制台应用程序中使用 .NET 事件。对 STA 的限制和对消息泵的需求特定于从 WinForms 和 ActiveX 控件(如 WebBrowser)接收事件(或来自 Win32 HWND 的消息,尽管这不一定需要 STA)。