Frage von Emanuel2003, 46

C# Console Schließen!?

Hey, ich möchte gerne ein Consolen Programm programmieren das (DIE GANZE ZEIT)überprüft ob man die Taste Esc gedrückt hatt!

Also: Das Programm läuft und egal wann (und wo das Programm bei Code ist) & der User Esc drückt wird das Programm geschloßen!

Mit der do{}while schliefe geht das nicht weil er ja sonst immer dort hängen bleibt BIS der User Esc drückt! & der danachfolgende Code wird nicht mehr Ausgeführt! + Wenn die co{}while schleife am Schluß steht dann muss der User das ganze Programm "durcharbeiten" damit er Esc drücken kann!

Antwort
von GustavAT, 42

Um die Schleife nicht zu blockieren benutzt man die KeyAvailable Property von Console.

Der Trick ist es zu prüfen, ob eine Taste gedrückt wurde und diese dann auszuwerten:

var info = new ConsoleKeyInfo();
do {
    while (!Console.KeyAvailable) {
        // hier laeuft das Programm
    }
    info = Console.ReadKey(true);
    // true, damit die Taste im Konsolenfenster nicht angezeigt wird
} while (info.Key != ConsoleKey.Escape);

Falls dir das nichts weiterhilft, kannst du auch im Main einen asynchronen Thread starten, indem die Logik abläuft und im Hauptthread auf eine Konsoleneingabe warten und auf ESC abprüfen.

Kommentar von GustavAT ,

Also z.B. so:

void Main()
{
    DoWorkAsync();
    while (Console.ReadKey(true).Key != Console.Key) {}
    Application.Exit();
}

Und die dazugehörigen statischen Methoden DoWorkAsync und DoWork:

public static async void Task DoWorkAsync() {
    Task.Run(() => DoWork());
}
public static void DoWork() {
    // Logik läuft hier ab ...
}

Die Klasse Task befindet sich im Namespace System.Threading.Tasks

Kommentar von GustavAT ,

Für die Konsoleanwendung Environment.Exit(0) und für Forms-Anwendungen Application.Exit()

Kommentar von Emanuel2003 ,

Danke :D

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten