c# -如何“强制退出”一个方法

本文关键字:方法 一个 强制退出 如何 退出 | 更新日期: 2023-09-27 18:01:51

[控制台应用程序]

我想在计时器上有一个方法,(Thread.Sleep),并在它旁边运行另一个方法,等待用户的响应。如果在用户响应(ReadKey)之前计时器已经超时,那么他们将失去一条生命。

我怎么能,简而言之,有一个ReadKey定时器?

c# -如何“强制退出”一个方法

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()返回后,向事件发出信号,另一个线程将知道它是由于键被按下还是因为超时而被唤醒,并可以做出相应的反应。