【发布时间】:2020-11-29 23:25:34
【问题描述】:
我有一个控制台程序。它的目的是检查 F1-F2 键是否在循环中被按下,然后在按下这些键之一但我无法让它正常工作时发送消息。我检测或监听键的方式是if(Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.F2)。 Console.ReadKey(true).Key == ConsoleKey.F2 阻止执行并等待输入,所以我必须将Console.KeyAvailable 放在它前面,这样循环才能继续并检查是否按下了下一个键。我在while(true) 循环中执行此操作,在Main() 中,直到我联系了我的一位朋友,他告诉我将整个事情放在一个独立的线程中。我做了几乎没有什么区别的事情(除了一些更简洁的代码)。
我读到了Keyboard.GetKeyStates(Key) 方法,但事实证明这在 C# NET 控制台应用程序中不起作用。目前,循环甚至不想检查 F1 是否被按下,除非我创建另一个单独的线程来检查 F2 是否被按下,这导致它仍然无法工作并且必须发送垃圾邮件来获取 ifs首先要做任何事情。
代码:
class Program
{
public static void Main()
{
Thread ThreadObj = new Thread(F1); //Creating the Thread
ThreadObj.Start(); //Starting the Thread
}
static void F1()
{
Console.WriteLine("Thread Started");
while (true)
{
if (Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.F1)
{
Console.WriteLine("F1");
}
if (Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.F2)
{
Console.WriteLine("F2");
}
Thread.Sleep(10);
}
}
}
【问题讨论】:
标签: c# windows console console-application