C# warten auf Eingabe einer Nummer

Gast #5031057
Hallo,

ich möchte ich C# eine Nummer eingeben, das Prinzip welches ich dafür 
anwenden möchte, kennen wir vom TV...

Wir drücken eine Taste, der TV erkennt z.B. die 5, wartet aber noch eine 
bestimmt Zeit und prüft ob ggf. noch eine 2. Taste gedrückt wird...

Ich habe hier ein paar Ansätze, bei welchen es mir schwer fällt diese 
noch "richtig" zusammen zu bringen.

> Hier habe ich eine Wartezeit
1
DateTime beginWait = DateTime.Now;
2
while (!Console.KeyAvailable && DateTime.Now.Subtract(beginWait).TotalSeconds < 5)
3
  Thread.Sleep(250);

jetzt kann ich z.B. mit ReadKey eine Eingebe tätigen.
mit einer For => schleife, ist es mir sogar möglich z.B. 3 "Ziffern" 
abzufangen und diese "aneinander zu hängen"
1
for(int i = 1; i <= 3; i++)
2
{
3
  reading = Console.ReadKey().KeyChar;
4
  Int32.TryParse(reading.ToString(), out parsedInt);
5
  res = res * 10 + parsedInt;
6

7
  Console.WriteLine(res);
8
}

Aber wie bekomme ich das jetzt hin, z.B. nur 2 Ziffern einzugeben oder 
nur 1 <- obwohl man ja 3 eingeben können DARF.

Meine Frage ist, wie richte ich den Timer so ein, dass z.B. 2 Sekunden 
ablaufen und diese nach jeder "Eingabe" resettet werden, laufen die 2 
Sekunden ohne Eingabe ab, läuft das Programm mit dem nächsten Schritt 
weiter.

>>>
Bitte geben Sie eine Nummer ein
> Warte 2 Sekunden auf eingabe
(Eingabe innerhalb von 2 Sekunden)
1
> Warte 2 Sekunden auf eingabe
(keine Eingabe innerhalb von 2 Sekunden)

=> Schleife abbrechen!


Vielen Dank
Gast
Moin,

so als Schnellschuss. Der Name der Funktion zeigt schon, das was nicht 
stimmt.
1
static string getStringWithCharLimitAndTimeout(uint charLimit, TimeSpan timeout){
2
    DateTime start = DateTime.Now;
3
    string retval = "";
4
    do {
5
        if(Console.KeyAvailable) {
6
            retval += Console.ReadKey().KeyChar;
7
            start = DateTime.Now;                    
8
        }                    
9
    } while(!timeElapsed(start,timeout) && retval.Length < charLimit);
10
            return retval;
11
}
12

13
static bool timeElapsed(DateTime start, TimeSpan timeout) {
14
        return DateTime.Now - start > timeout;
15
    }

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.