Sto scrivendo un'app Console in C# 4 e voglio cancellare con grazia il mio programma e Ctrl + C viene premuto. Il seguente codice che ho usato molte volte prima, ma ora quando provo ad usarlo in .NET 4, sembra che si stia verificando una strana eccezione non gestita.Come utilizzare Console.CancelKeyPress in .NET 4? (Funziona bene in .NET 3.5 e seguenti)
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;
}
}
}
Se cambio il framework di destinazione per .NET 3.5, funziona.
EDIT: Sembra questa persona sta vedendo lo stesso problema: http://johnwheatley.wordpress.com/2010/04/14/net-4-control-c-event-handler-broken/
Qual è l'eccezione? Dove succede? È possibile abilitare l'interruzione su varie eccezioni nella finestra di dialogo Eccezioni in VS (Debug -> Eccezioni o Ctrl + Alt + E). –
Non è un'eccezione normale. La persona nel link che ho aggiunto lo descrive come un "errore di programma". Ecco uno screenshot di ciò che vedo premendo Ctrl + C quando il framework di destinazione è .NET 4 in esecuzione in VS 2010: http://img227.imageshack.us/img227/5871/consoletest.jpg – BigJoe714
Solo un'ipotesi, ma potresti essere in grado di risolvere questo problema disabilitando il processo di hosting: fare clic con il tasto destro del mouse sul progetto, selezionare Proprietà, andare alla scheda Debug e deselezionare "Abilita il processo di hosting di Visual Studio". –