C# warten auf Eingabe einer Nummer

Gast #5031057
Lesenswert?

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 #5031168
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren