Estoy asumiendo que "cerrar sin problemas la aplicación" es la parte que está luchando con aquí. De lo contrario, su aplicación se cerrará automáticamente en ctrl-c. Deberías cambiar el título.
Aquí hay una demostración rápida de lo que creo que necesita. Se podría refinar un poco más con el uso de bloqueo y Monitores para notificación. No estoy seguro exactamente lo que necesita, sin embargo, así que voy a plantear esta ...
class Program
{
private static bool _s_stop = false;
public static void Main(string[] args)
{
Console.CancelKeyPress += new ConsoleCancelEventHandler(Console_CancelKeyPress);
while (!_s_stop)
{
/* put real logic here */
Console.WriteLine("still running at {0}", DateTime.Now);
Thread.Sleep(3000);
}
Console.WriteLine("Graceful shut down code here...");
//don't leave this... demonstration purposes only...
Console.ReadLine();
}
static void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e)
{
//you have 2 options here, leave e.Cancel set to false and just handle any
//graceful shutdown that you can while in here, or set a flag to notify the other
//thread at the next check that it's to shut down. I'll do the 2nd option
e.Cancel = true;
_s_stop = true;
Console.WriteLine("CancelKeyPress fired...");
}
}
Supongo que "cerrar la aplicación correctamente" es la parte con la que está luchando aquí. De lo contrario, su aplicación se cerrará automáticamente en ctrl-c. Deberías cambiar el título. – TheSoftwareJedi
No, lo que estaba teniendo problemas es "la mejor manera de mantener abierta la aplicación de la consola siempre que el evento CancelKeyPress no se haya activado" como dice la pregunta :) –