C# - 如何“强制退出”一种方法

时间:2011-07-11 20:50:23

标签: c# multithreading methods timer

[控制台应用程序]

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

总之,我怎样才能在计时器上安装ReadKey?

2 个答案:

答案 0 :(得分:5)

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
}

答案 1 :(得分:0)

您可以创建共享的ManualResetEvent,启动新线程(或使用线程池)并使用.WaitOne()方法在第二个线程上使用超时。在ReadKey()返回后,您发出事件信号,另一个线程将知道是否因为按下了键或因超时而被唤醒,并且可以做出相应的反应。