gpt4 book ai didi

c# - 使用控制台应用程序卡在 C# 中的 GenerateConsoleCtrlEvent

转载 作者:行者123 更新时间:2023-11-30 15:13:12 26 4
gpt4 key购买 nike

我正处于最艰难的时期,试图让它发挥作用,希望你们中的一个人以前做过。

我有一个 C# 控制台应用程序正在运行一个继承其控制台的子进程。我希望将外部应用程序捕获的 ctrl-c 传递给内部应用程序,以便它有机会正常关闭。

我有一些非常简单的代码。我启动一个进程,然后使用 WaitForExit(10) 对其进行轮询。我还注册了一个 CancelKeyPress 处理程序,它在触发时将 bool 设置为 true。轮询循环也会检查这一点,当它为真时,它会调用 GenerateConsoleCtrlEvent()(我已经通过 pinvoke 对其进行了映射)。

我尝试了 GenerateConsoleCtrlEvent() 的多种参数组合。第一个参数为 0 或 1,第二个参数为 0 或子进程的 ID。似乎没有任何效果。有时我得到一个错误的回复,Marshal.GetLastWin32Error() 返回 0,有时我得到真实的回复。但没有一个会导致子应用程序收到 ctrl-c。

可以肯定的是,我编写了一个测试 C# 应用程序作为子应用程序,它打印出它正在发生的事情,并验证在它运行时手动键入 ctrl-c 确实会导致它退出。

我已经为此苦苦思索了几个小时。谁能给我一些指示,告诉我该去哪里?

最佳答案

不太确定这是一个好方法。这仅在使用 CreateProcess() 的 CREATE_NEW_PROCESS_GROUP 标志创建子进程时有效。然而,System.Diagnostics.Process 类不支持这一点。

考虑使用 Main() 方法的返回值。 Windows SDK 中已经为 Ctrl+C 中止定义了一个唯一值,STATUS_CONTROL_C_EXIT 或 0xC000013A。父进程可以从 Process.ExitCode 属性中获取该返回代码。

关于c# - 使用控制台应用程序卡在 C# 中的 GenerateConsoleCtrlEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/297615/

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