Estoy escribiendo una aplicación de consola en C# 4 y quiero cancelar mi programa con gracia y presionar Ctrl + C. El siguiente código lo he usado muchas veces antes, pero ahora cuando trato de usarlo en .NET 4, parece que se está produciendo una extraña excepción no controlada.¿Cómo uso Console.CancelKeyPress en .NET 4? (Funciona bien en .NET 3.5 y abajo)
namespace ConsoleTest
{
class Program
{
private static bool stop = false;
static void Main(string[] args)
{
System.Console.TreatControlCAsInput = false;
System.Console.CancelKeyPress += new ConsoleCancelEventHandler(Console_CancelKeyPress);
while (!stop)
{
System.Console.WriteLine("waiting...");
System.Threading.Thread.Sleep(1000);
}
System.Console.WriteLine("Press any key to exit...");
System.Console.ReadKey(true);
}
static void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e)
{
stop = true;
e.Cancel = true;
}
}
}
Si cambio el Marco de destino de .NET 3.5, funciona.
EDIT: Parece que esta persona está viendo el mismo problema: http://johnwheatley.wordpress.com/2010/04/14/net-4-control-c-event-handler-broken/
¿Cuál es la excepción? ¿Dónde ocurre? Puede habilitar la interrupción de varias excepciones en el cuadro de diálogo Excepciones en VS (Depurar -> Excepciones o Ctrl + Alt + E). –
No es una excepción normal. La persona en el enlace que agregué lo describe como un "error del programa". Aquí hay una captura de pantalla de lo que veo al presionar Ctrl + C cuando target framework está ejecutando .NET 4 en VS 2010: http://img227.imageshack.us/img227/5871/consoletest.jpg – BigJoe714
Solo una conjetura, pero es posible que ser capaz de solucionar este problema mediante la desactivación del proceso de alojamiento: haga clic derecho en su proyecto, seleccione Propiedades, vaya a la pestaña Depuración y desmarque "Habilitar el proceso de alojamiento de Visual Studio". –