Laden...

Laufende Schleife via Tastendruck beenden

Erstellt von CarnifeX vor 8 Jahren Letzter Beitrag vor 8 Jahren 8.887 Views
C
CarnifeX Themenstarter:in
48 Beiträge seit 2015
vor 8 Jahren
Laufende Schleife via Tastendruck beenden

Hey Leute,

ich habe eine kleines Problem. Und zwar habe ich eine Schleife gebaut die Meinen Text zum blinken bringt. Ich möchte jetzt dass die Schleife so lange läuft bis ich eine beliebige Taste auf der Tastatur drücke.

Mir ist mein Fehler auch bekannt:
Die Schleife stoppt weil sie bei dem Befehl ist auf eine Eingabe zu warten.

ConsoleKeyInfo weiter = Console.ReadKey();

Wie schaffe ich es jetzt dass sie den Befehl solange ignoriert bis er auch wirklich erst benutzt wird?

while (true)
            {
                WriteBlinkingText(txt, 500, true);
                WriteBlinkingText(txt, 500, false);

                ConsoleKeyInfo weiter = Console.ReadKey();
            if (weiter.KeyChar == 13)
            {
                break;
            }

M
334 Beiträge seit 2007
vor 8 Jahren

Dazu musst du die Schleife in einem Thread laufen lassen.
Dann kannst du die Eingabe von der Konsole einlesen während die Schleife läuft.
Anschließend merkst du dir die Eingabe in einer Variable, die du in der Schleife überprüfen kannst.

C
CarnifeX Themenstarter:in
48 Beiträge seit 2015
vor 8 Jahren

Danke für die beiden Tipps. Doch selbst nach langem probieren bekomme ich es nicht gebacken 🙄 ?(

2.207 Beiträge seit 2011
vor 8 Jahren

Was hast du denn probiert? Wo hakts? Was bekommst du nicht gebacken? Haben die Tipps dir geholfen? Wie hast du sie eingebaut, dass was nicht funktioniert?

[Hinweis] Wie poste ich richtig? Punkt 5

Gruss

Coffeebean

C
CarnifeX Themenstarter:in
48 Beiträge seit 2015
vor 8 Jahren

Hab es jetzt doch hinbekommen. Mit der KeyAvailable-Methode (Danke an Th69)

do
            {
                while (!Console.KeyAvailable)
                {
                    System.Console.SetCursorPosition(System.Console.WindowWidth / 2 - txt.Length / 2, System.Console.CursorTop);
                    WriteBlinkingText(txt, 1000, true);
                    WriteBlinkingText(txt, 500, false);
                }
            } while (Console.ReadKey(true).Key != ConsoleKey.Enter);
3.170 Beiträge seit 2006
vor 8 Jahren

Hallo,

warum hantierst Du da mit geschachtelten Schleifen?
es reicht, wenn Du in der ursprünglichen while(true)-Schleife irgendwo die beiden Zeilen unterbringst:

if (Console.KeyAvailable && Console.ReadKey().Key == ConsoleKey.Enter)
    break;

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca