0

Ich habe eine .NET-Konsolenanwendung (in C#) auf v4.5.1 geschrieben. Meine Main Methode sieht wie folgt aus:Verwenden des CancelKeyPress-Ereignisses in einer .NET-Konsolenanwendung

public static void Main(string[] args) 
{ 
    Console.CancelKeyPress += delegate 
           { 
            CancelToken.Cancel(); 
           }; 

    var kbTask = Task.Run(async() => 
           { 
            while (true) 
            { 
             await ProcessCommand(Console.ReadLine()); 
            } 
           }, CancelToken.Token); 

    kbTask.Wait(CancelToken.Token); 
} 

Eine der möglichen Befehle (gehandhabt durch ProcessCommand) ruft eine lang andauernde Prozess, Ich mag würde der Lage sein, mit STRG + C über den Console.CancelKeyPress Delegierten abzubrechen.

Aber wenn ich das mache Visual Studio öffnet eine Registerkarte, die sagt "mscorlib.dll ist nicht geladen" und dann nichts - die Konsole bleibt offen, aber nicht reagiert.

Ich habe auch versucht, die App außerhalb von Debug ausführen, aber ich kann die ausführbare Datei nicht finden.

+0

Sie müssen den Status des Cancel Tokens innerhalb der 'while' Schleife nach dem Ausbrechen überprüfen, wenn es gesetzt ist. – Sean

+0

Crystal Ball sagt, dass Sie Avast verwenden. Deinstallieren Sie es so schnell wie möglich. –

+0

@HansPassant Ihre Kristallkugel ist falsch. Es wurde kein AV installiert, außer dem Windows Defender. – awj

Antwort

0

Wechseln Sie zu Tools, Optionen, Debugging, Symbole und legen Sie einen Cache-Speicherort fest. Dann drücken Sie die oben genannte Schaltfläche und es werden die erforderlichen Symbole für Sie abgerufen und in dem von Ihnen bereitgestellten Cache gespeichert.

Microsofts Compiler-Tools erstellen Symbole in separaten Dateien mit der Erweiterung .pdb (Programmdatenbank). Dadurch können sie abgelöste Symbole für Release-Binärdateien erstellen. Mit einem Symbolserver kann Ihre IDE beim Debugging die Symboldatei abrufen, die der bestimmten Version der DLL entspricht. Sie können dieses System auch für Ihre eigenen Produktbinärdateien konfigurieren, was sehr nützlich sein kann, um eventuelle Abstürze auf Endbenutzermaschinen nach dem Tod zu beheben.

Weitere Informationen zur Verwendung öffentlicher Symbole finden Sie unter Microsoft Documentation.

+0

Nachdem ich dies getan habe, kann ich sehen, dass die Symbole dynamisch geladen werden, aber jetzt, wenn ich STRG + C drücke, öffnet Visual Studio die Registerkarte "Quelle nicht verfügbar" und die Konsole reagiert nicht mehr. – awj

+0

"Quelle nicht verfügbar" Fehler tritt auf, wenn die Anwendung versucht, nicht verwalteten Code zu lesen. Lass mich das für dich klären. – BilalAhmed