我必须创建这个基于控制台的应用程序,我遇到了这个问题: 我使用多线程创建了类似KeyListener的东西(不能做简单循环,因为有第二个线程同时运行)。 并且线程中的循环需要检查按下的键是否为整数。
我不明白的是什么?
我得到这个的方式:在线程中有一个无限循环试图捕获输入,如果input == 1
它在控制台中写入文本。
我错过了什么?
static void KeyRead()
{
do
{
int i = (int) Console.ReadKey().KeyChar;
if (i == 1) {
Console.Out.Write("Key 1 pressed");
}
} while (true);
}
static void Main(string[] args)
{
Thread keyListner = new Thread(new ThreadStart(KeyRead));
keyListner.Start();
}
答案 0 :(得分:2)
KeyChar 返回 char 类型的值,并将 char 转换为 int 返回表示该字符的unicode值。但是字符'1'
有unicode value 49而不是1.所以你必须修改条件以将 i 比较为eqaual而不是1。
static void KeyRead()
{
do
{
int i = (int)Console.ReadKey().KeyChar;
if (i == 49)
{
Console.Out.Write("Key 1 pressed");
}
} while (true);
}
但是,完全避免这种整数转换并直接比较字符甚至更好:
static void KeyRead()
{
do
{
char c = Console.ReadKey().KeyChar;
if (c == '1')
{
Console.Out.Write("Key 1 pressed");
}
} while (true);
}