為 Console.ReadLine()
添加超時機制
控制台應用程序需要用戶輸入才能運行,但如果用戶響應時間過長會發生什麼?實現超時機制允許您的程序即使用戶未在指定時間內提供輸入也能繼續執行。
最直接的方法是使用帶有計時器的 while 循環來定期檢查輸入。如果在沒有輸入的情況下經過一定的時間,程序可以拋出超時異常。
<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>
對於更高級的超時機制,可以使用多線程方法。後台線程監聽輸入,而主線程暫停執行。收到輸入後,後台線程發出信號,讓主線程繼續執行。
<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>
這兩個例子都展示瞭如何為 Console.ReadLine()
添加超時功能,第一個例子更簡潔,第二個例子更健壯,適用於更複雜的場景。 選擇哪個方法取決於你的具體需求和對代碼複雜度的容忍度。
以上是如何實現Console.Readline()的超時?的詳細內容。更多資訊請關注PHP中文網其他相關文章!