我有一个程序可以启动几个子流程(ProcessStartInfo
,Process
组合)。
父应用程序正在监听其Main
函数中的取消键:
Console.CancelKeyPress += (s, ev) =>
{
// do stuff on Ctrl + C
};
这在适当的按键上被调用,一切都很好。但是,我启动的子进程还订阅了Console.CancelKeyPress
,即使我启动了它们的RedirectStandardInput = true
集,它们也被触发。
因此,似乎我误解了某些内容,或者Console.CancelKeyPress
不被视为标准输入,而是某些特殊内容。
我有一个特定的关闭顺序要使用,我的意图是在适当的时候关闭子进程,但是由于它们也收到Console.CancelKeyPress
,因此无法在适当的时间指导它们关闭。
现在授予许可,我可以编辑其源代码并将其禁用,或在其启动时添加一些标志以不订阅Console.CancelKeyPress
,但是我想知道我是否只是在这里丢失了一些东西,因为这似乎不是必需的,尤其是我正在重定向子流程的标准输入。
我发现了这个有点相关的问题: https://stackoverflow.com/a/1802908/1060314
作者指出:
我的理解是,当您在控制台中按CTRL + C时,默认情况下,控制台附带的所有进程都会收到它,而不仅仅是父进程。