J'écris une application de console en C# 4 et je veux annuler mon programme gracieusement et Ctrl + C est pressé. Le code suivant que j'ai utilisé plusieurs fois auparavant, mais maintenant en essayant de l'utiliser dans .NET 4, il semble qu'une exception non gérée étrange se produise.Comment utiliser Console.CancelKeyPress dans .NET 4? (Fonctionne bien dans .NET 3.5 et ci-dessous)
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 je change le Framework cible à .NET 3.5, il fonctionne.
EDIT: Il semble que cette personne voit la même question: http://johnwheatley.wordpress.com/2010/04/14/net-4-control-c-event-handler-broken/
Quelle est l'exception? Où cela arrive-t-il? Vous pouvez activer la rupture sur diverses exceptions dans la boîte de dialogue Exceptions dans VS (Debug -> Exceptions ou Ctrl + Alt + E). –
Ce n'est pas une exception normale. La personne dans le lien que j'ai ajouté le décrit comme une "faute de programme". Voici une capture d'écran de ce que je vois en appuyant sur Ctrl + C lorsque le framework cible est .NET 4 fonctionnant dans VS 2010: http://img227.imageshack.us/img227/5871/consoletest.jpg – BigJoe714
Juste une supposition, mais vous pourriez être capable de contourner ce problème en désactivant le processus d'hébergement: cliquez-droit sur votre projet, sélectionnez Propriétés, allez à l'onglet Déboguer, et décochez "Activer le processus d'hébergement Visual Studio". –