在Main

时间:2017-03-26 19:56:45

标签: c# multithreading keyboard

我在控制台应用程序中制作游戏蛇并且游戏应该在一秒左右后刷新(蛇必须继续移动)。 这就是我使用Keyboard.IsKeyPressed()的原因,因为当我使用Console.ReadKey()时它会停止程序而不能继续。这就是Main中运动的代码:

  System.Threading.Thread.Sleep(1000);

        if (Keyboard.IsKeyDown(Key.Up))
            Snake.Move(ConsoleKey.UpArrow);
        else if (Keyboard.IsKeyDown(Key.Down))
            Snake.Move(ConsoleKey.DownArrow);
        else if (Keyboard.IsKeyDown(Key.Left))
            Snake.Move(ConsoleKey.LeftArrow);
        else if (Keyboard.IsKeyDown(Key.Right))
            Snake.Move(ConsoleKey.RightArrow);
        else
            Snake.Move(ConsoleKey.Backspace);

它位于while循环中,而backspace只是我传递的东西,因此它将刷新并继续沿同一方向而不实际移动。但是,当我这样做时,我的System.InvalidOperationException调用线程必须是STA,经过一些专业的googeling我无法找到解决这个问题的方法任何帮助都会被appriciated.and一个针对SAThreads的explenation aswll:)

1 个答案:

答案 0 :(得分:3)

尝试在[Main]方法中添加[STAThread]属性:

[STAThread]
static void Main()
{
   // ...
}