Forum: PC-Programmierung C# warten auf Eingabe einer Nummer


von baer (Gast)


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

von nicht"Gast" (Gast)


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
    }

von baer (Gast)


Lesenswert?

sehr sehr geil

1000 dank

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.