2017-04-15 6 views
-3

このコンソールベースのアプリケーションを作成する必要があります。この問題があります。 マルチスレッドを使用してKeyListenerのようなものを作成しました(2番目のスレッドが実行されているため同時に)。 スレッド内のループは、押されたキーが整数かどうかをチェックする必要があります。マルチスレッドを使用したコンソールアプリケーションのキーリスナー

私は理解していないことは何ですか?

私がこれを得る方法:入力をキャプチャしようとするスレッド内に無限ループがあり、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

_「わからないのですか」_ - あなたの質問は何ですか?あなたがしたくないコードは何ですか?あなたは修正する方法を理解できません。 –

+0

基本的に何もしません。それが問題です。 「if」ステートメントがなかったのと同じです。 if文の後にコードを実行させるにはどうすればよいですか? 私はアプリケーションを起動し、 "1"を押しますが、 "Key 1 pressed"と書いても何も起こりません。 – mafiozorek

+1

あなたのプログラムはスレッドなしでも動作しません。 http://stackoverflow.com/questions/28955029/how-do-i-convert-a-console-readkey-to-an-int-c-sharp –

答えて

2

は、keyChar戻り型チャーの値と、その文字を表すチャー INT に返すUnicode値をキャスト。しかし、文字'1'unicode value 49、持っていない1。だから、私は 49の代わりに、

static void KeyRead() 
{ 
    do 
    { 
     int i = (int)Console.ReadKey().KeyChar; 
     if (i == 49) 
     { 
      Console.Out.Write("Key 1 pressed"); 
     } 
    } while (true); 
} 

1にeqaualするを比較する条件を変更する必要がしかし、完全にこの整数変換を回避し、比較することさえbeterです直接文字:

static void KeyRead() 
{ 
    do 
    { 
     char c = Console.ReadKey().KeyChar; 
     if (c == '1') 
     { 
      Console.Out.Write("Key 1 pressed"); 
     } 
    } while (true); 
} 
関連する問題