使用多线程的控制台应用程序中的Key Listner

时间:2017-04-15 05:49:08

标签: c#

我必须创建这个基于控制台的应用程序,我遇到了这个问题: 我使用多线程创建了类似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();                   
}

1 个答案:

答案 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);
}