簡體   English   中英

C# - 如何“強制退出”方法

[英]C# - How to “Force Quit” a Method

[控制台應用程序]

我想在計時器上有一個方法,(Thread.Sleep)並在它旁邊運行另一種方法,等待用戶的響應。 如果計時器在用戶響應(ReadKey)之前就用完了,那么他們將失去生命。

簡而言之,我怎樣才能讓 ReadKey 在計時器上?

Console.ReadKey()被阻塞,所以你不能使用它。

您可以使用Console.KeyAvailable()Thread.Sleep()循環。 無需定時器。

var lastKeyTime = DateTime.Now;
...
while (true)
{
   if (Console.KeyAvailable())
   {
      lastKeyTime = DateTime.Now;
      // Read and process key
   }
   else
   {
      if (DateTime.Now - lastKeyTime  > timeoutSpan)
      {
         lastKeyTime = DateTime.Now;
         // lose a live
      }
   }
   Thread.Sleep(50);  // from 1..500 will work
}

您可以創建一個共享的 ManualResetEvent,啟動一個新線程(或使用線程池)並使用 .WaitOne() 方法在第二個線程上超時。 在 ReadKey() 返回后,您發出事件信號,其他線程將知道它是因為按下鍵還是因為超時而被喚醒,並可以做出相應的反應。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM