C# Aplicativo de console: impedindo que o Control-C seja impresso?
-
27-09-2019 - |
Pergunta
Eu tenho um aplicativo de console e quero capturar o Control-C e fechar graciosamente.
Eu tenho o seguinte código:
Console.CancelKeyPress += new ConsoleCancelEventHandler((o, e) =>
{
Logger.Log("Control+C hit. Shutting down.");
resetEvent.Set();
});
E as janelas de saída mostram:
16/06/2010 15:24:34: Control+C Hit. Desligando.
^C
Existe uma maneira de impedir o personagem Control-C ^C
de aparecer? Não é um enorme acordo, mas, por algum motivo, estarei se fixando nele porque sou anal assim.
Solução
Sendo um aplicativo de console, eu usaria Environment.Exit
para sinalizar que o aplicativo está saindo e dessa maneira interromper o ^C
de ser impresso.
Você pode até fornecer um código de erro específico para simbolizar que o usuário pressionou Ctrl+c.
static void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e)
{
Console.WriteLine("Control+C hit. Shutting down.");
Environment.Exit(-1);
}
Outras dicas
Isso deve funcionar ...
Console.CancelKeyPress += new ConsoleCancelEventHandler((o, e) =>
{
Console.WriteLine("Control+C hit. Shutting down.");
Environment.Exit(0);
});
Console.ReadLine();
Embora essa não seja necessariamente uma solução que você deseja implementar, evita que o ^c seja exibido:
static void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e)
{
Console.WriteLine("Control+C hit. Shutting down.");
Process.GetCurrentProcess().Kill();
}