侦听Console.CancelKeyPress的子流程将接收它,即使该流程以RedirectStandardInput = true启动

时间:2018-07-28 22:53:10

标签: c# .net-core

我有一个程序可以启动几个子流程(ProcessStartInfoProcess组合)。

父应用程序正在监听其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时,默认情况下,控制台附带的所有进程都会收到它,而不仅仅是父进程。

0 个答案:

没有答案