Hinzufügen eines Zeitüberschreitungsmechanismus
Console.ReadLine()
Die Konsolenanwendung erfordert, dass die Benutzereingabe ausgeführt wird. Was wird jedoch passieren, wenn der Benutzer zu lange antwortet? Durch die Implementierung des Zeit -OUT -Mechanismus kann Ihr Programm auch dann weiter ausführen, wenn der Benutzer innerhalb der angegebenen Zeit keine Eingaben bereitstellt.
Implementierungsmethode
Die direkteste Methode ist die Verwendung des WHHE -Zyklus mit einem Timer, um die Eingabe regelmäßig zu überprüfen. Wenn es eine bestimmte Zeit ohne Input braucht, kann das Programm das Auszeitsabschluss herauswerfen.Die erweiterte Methode zur Verwendung von AutoresetEvent
<code class="language-csharp">using System; using System.Threading; public class ConsoleTimeout { public static string InputWithTimeout(int timeoutSeconds) { Console.WriteLine("请输入内容:"); var timer = new Timer((_) => { throw new TimeoutException("输入超时"); }, null, timeoutSeconds * 1000, Timeout.Infinite); string input = Console.ReadLine(); timer.Dispose(); return input; } }</code>
Diese beiden Beispiele zeigen, wie Timeout -Funktionen zu
hinzugefügt werden können. Welche Methode zu wählen, hängt von Ihren spezifischen Anforderungen und Ihrer Toleranz für die Codekomplexität ab.<code class="language-csharp">class Reader { private static Thread inputThread; private static AutoResetEvent getInput, gotInput; private static string input; static Reader() { getInput = new AutoResetEvent(false); gotInput = new AutoResetEvent(false); inputThread = new Thread(reader); inputThread.IsBackground = true; inputThread.Start(); } private static void reader() { while (true) { getInput.WaitOne(); input = Console.ReadLine(); gotInput.Set(); } } public static string ReadLine(int timeOutMillisecs = Timeout.Infinite) { getInput.Set(); bool success = gotInput.WaitOne(timeOutMillisecs); if (success) return input; else throw new TimeoutException("用户未在规定时间内提供输入。"); } }</code>
Das obige ist der detaillierte Inhalt vonWie implementieren Sie eine Zeitüberschreitung für console.readline ()?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!