中止Console.ReadKey方法

时间:2015-07-15 16:35:47

标签: c# console task

我的控制台应用程序正在等待控制台窗口中的按键。 Console.ReadKey方法会阻塞,直到有新的键事件可用。但是,由于来自网络连接的数据等其他事件,应用程序也可以继续运行。发生这种情况时,应用程序必须停止收听按键事件,以便后续输入正常工作,例如后续调用Console.ReadLine。但仍有阻止拨打ReadKey并且在ReadLine再次投放之前正在吃下一个按键的电话。

ReadKey调用已在Task中运行,因此我可以将其与其他事件一起等待。但是当我想要它时,任务就不会结束。它只会在用户最终按下控制台窗口中的某个键时结束。该密钥可能应该用于下一个读取方法。

我已尝试捕获任务的当前主题并在其上调用Thread.Abort,但这会导致ThreadAbortedExceptions出现在其他位置。即使在某处处理它们也无济于事。也许它与某项任务有关,而这项任务并非“正在运行”。但是处于WaitingForActivation状态。不管它是什么意思。 (老实说,我没有想到处理他们不应该出现的例外情况。只是提到我的绝望行动。)

那么我该怎样做才能中止对Console.ReadKey方法的阻塞调用?阅读其反编译的实现,它调用ReadConsoleInput本机函数,该函数会阻塞,直到有一个事件可用。

我无法找到生成或注入此类事件的方法。

我怎样才能最终阻止这个功能的蠢事?

附注:使用Console.KeyAvailable不是一个选项,因为它会导致忙于等待控制台输入。我已经从Win API的控制台功能的某个地方读到了等待控制台输入事件的某种方式,但这完全没有被托管API覆盖。

0 个答案:

没有答案