Timeouts für console.readline () in C#
implementieren
Konsolenanwendungen stützen sich häufig auf Console.ReadLine()
für die Benutzereingabe. Es ergeben sich jedoch Situationen, in denen eine Reaktionszeit zur Verhinderung eines unbestimmten Programms erforderlich ist.
vorhandene Ansätze und ihre Grenzen
Es gibt verschiedene Lösungen, aber viele fallen kurz:
- Funktionalitätsverlust: Alternativen zu
Console.ReadLine()
Fehlen häufig entscheidende Merkmale wie Rückraum, Löschen und Pfeilschlüsselunterstützung.
- Multi-Call-Probleme: Wiederholte Anrufe können zu unvorhersehbaren Verhaltens- oder Threading-Problemen führen.
- ineffizient geschäftig erwarten: einfache Zeitleiterimplementierungen verwenden häufig ressourcenintensive, geschäftige Wait-Schleifen.
Eine überlegene Lösung: Die
Klasse Reader
Dieser verbesserte Ansatz vermeidet, dass ein wirksamerer und zuverlässigerer Zeitüberschreitungsmechanismus geschäftiger ist. Eine benutzerdefinierte
Klasse verwendet einen Hintergrund -Thread, um die Eingaben zu verwalten, und bietet folgende Methoden: Reader
- : liest eine Linie mit einem optionalen Zeitüberschreitungsmessgerät. Wenn
Reader.ReadLine(int timeoutMillisecs = Timeout.Infinite)
weggelassen wird, wartet es auf unbestimmte Zeit. timeoutMillisecs
- : Ähnlich wie
Reader.TryReadLine(out string line, int timeoutMillisecs = Timeout.Infinite)
, retektiert jedoch ReadLine
für erfolgreiche Eingaben innerhalb des Timeouts true
ansonsten. Die Eingabe ist im Parameter false
verfügbar, falls erfolgreich. line
Verwendungsbeispiel
Um diese Lösung zu verwenden:
Die - Klasse instanziieren.
Reader
Verwenden Sie - oder
Reader.ReadLine()
mit Ihrem gewünschten Zeitübergang (in Millisekunden). Reader.TryReadLine()
Handle - Wenn
TimeoutException
mal ausgeht. Reader.ReadLine()
Überprüfen Sie den Rückgabewert von - und greifen Sie auf die Eingabe über den Parameter
Reader.TryReadLine()
zu. out
Vorteile dieses Ansatzes
Diese Methode bietet mehrere wichtige Vorteile:
- erhaltene Funktionalität: behält alle Merkmale von , einschließlich der speziellen Schlüsselhandhabung.
Console.ReadLine()
- Zuverlässiges Multi-Call-Verhalten: behandelt mehrere Aufrufe konsistent und stellt nur eine aktive Eingabemestütze sicher.
- Effiziente Ressourcenverbrauch: vermeidet verschwenderische, geschäftige Erwartung.
- Reaktionsfähigkeit: Das Programm bleibt reaktionsschnell, auch wenn der Benutzer innerhalb des Zeitlimits keine Eingaben angibt.
Das obige ist der detaillierte Inhalt vonWie kann ich eine Zeitüberschreitung für console.readline () mit erhaltenen Funktionen implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn