我想让我的控制台应用程序运行一段时间,如果在用户按下shift键的过程中任何时候,最后会给用户一些选项。这可能吗?
答案 0 :(得分:2)
当然,在主线程中使用ReadKey
(MSDN)轮询控制台输入时,在另一个线程中运行处理任务。
Thread thread = new Thread(() => DoWork());
thread.Start();
while (true) {
Thread.Sleep(10);
var keyInfo = Console.ReadKey();
if ((keyInfo.Modifiers & ConsoleModifiers.Shift) != 0) {
// take note of shift
}
}
如果线程不是一个选项(它应该是),你将不得不定期中断处理以检查键输入,或者你可以创建一个隐藏的窗口并通过它来处理密钥。
答案 1 :(得分:2)
我将无限循环更改为查找在我的进程完成后设置的标志的循环。我还改变了Shift键的查找方式,因为它看起来不像Console.ReadKey()正在为Shift做任何事情。尽管如此,我还是会给Ron带来线程。这段代码测试好了:
Dim thread As New System.Threading.Thread(AddressOf Generate)
thread.Start()
While _generating
System.Threading.Thread.Sleep(10)
If (System.Windows.Forms.Control.ModifierKeys And Windows.Forms.Keys.Shift) = Windows.Forms.Keys.Shift Then
_showOptions = True
End If
End While