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.

Foi útil?

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();
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top