浅析 C# Console 控制台为什么也会卡死
💡
原文中文,约5700字,阅读约需14分钟。
📝
内容提要
控制台程序卡死的原因是因为快速编辑窗口启用导致消息流程阻塞,文章介绍了验证方法和调试注意事项。
🎯
关键要点
- 控制台程序卡死的原因是快速编辑窗口启用导致消息流程阻塞。
- 控制台能够响应窗口事件是因为它开了一个配套的conhost窗口子进程。
- Console.WriteLine的底层调用逻辑是ntdll!NtWriteFile,涉及用户态与内核态的交互。
- conhost的提取逻辑通过kernelbase!DeviceIoControl函数与驱动程序进行通信。
- 快速编辑窗口启用后,GetMessage会感知到自定义的MSG消息,导致阻塞。
- 通过调试可以验证快速编辑窗口的处理消息码,发现与其相关的自定义消息405。
➡️