[控制台应用程序]
我想在计时器上有一个方法(Thread.Sleep)并在它旁边运行另一个方法,等待用户的响应。如果计时器在用户可以响应之前耗尽(ReadKey),那么它们将失去生命。
总之,我怎样才能在计时器上安装ReadKey?
答案 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()返回后,您发出事件信号,另一个线程将知道是否因为按下了键或因超时而被唤醒,并且可以做出相应的反应。