2017-08-02 7 views
0

私はJavaで上級ですが、C#で血まみれの初心者です。 私の意図ははっきりしていると思う: キーボード上ですぐに 'A'文字を印刷したいが、それはうまくいかない:(私はすでにPresentationCore.dllを追加した。 これは基本的なことだ。あなたのアドバイスを事前に おかげで、私はキーボードではなく、コンソール経由でこれを行うためにここでは、コードです:。C#キーボードアクセス

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Runtime.InteropServices; 
using System.Text; 
using System.Threading; 
using System.Threading.Tasks; 
using System.Windows.Input; 

namespace ConsoleApp1 
{ 
class Program 
{ 

    static void Main(string[] args) 
    { 
    Console.WriteLine("This is a crappy programm, which doesn't work the way it is supposed to do!"); 
     while (true) 
     { 
      try 
      { 
       if (Keyboard.IsKeyDown(Key.A)) 
       { 
        Console.WriteLine("A is down! A is down!"); 
       } 
      } 
      catch (System.InvalidOperationException e) 
      { 

      } 
     } 
    } 
} 
} 
+0

「うまくいきません」 - 何がしますか、何をすべきですか?具体的に何が助けを必要としますか? – maccettura

+1

KeyDownイベントを見ましたか?私が言及したように – Yahtzee

+0

:「A is down!A is down!」という行を印刷する必要があります。 'A'(キーボード上の文字)が押されるとすぐに。 そして、「A」がダウンしたときにすぐに行が表示されません。 –

答えて

1

問題は、コンソールアプリケーションは、メインスレッドが何であるか混乱を持っているということです

が。

この属性をあなたの上に置きますstatic void Main(string[] args)

[STAThread] 

これは、アプリケーションのCOMスレッドモデルがシングルスレッドアパートメントまたはSTAであることを示しています。

編集:

また、Key列挙型が配置されている場所それはだとして、WindowsBase.dllへの参照を追加することを忘れないでください!

0
if (Console.KeyAvailable) 
{ 
    if (Console.ReadKey().Key == ConsoleKey.A) 
     Console.WriteLine("A is down! A is down!"); 
} 

あなたは今PresentationCore.dllは必要ありません。