【问题标题】:System.InvalidOperationException when using Keyboard.IsKeyDown() in Main在 Main 中使用 Keyboard.IsKeyDown() 时出现 System.InvalidOperationException
【发布时间】:2017-03-26 19:56:44
【问题描述】:

我正在控制台应用程序中制作游戏蛇,游戏应该在一秒钟左右后刷新(蛇必须继续移动)。 这就是我使用 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 循环内,而退格键只是我通过的东西,因此它将刷新并沿同一方向继续,而实际上不会以不同的方式移动。但是当我这样做时,我是 System.InvalidOperationException 调用线程必须是 STA,经过一些专业的谷歌搜索后,我无法找到解决此问题的方法

【问题讨论】:

    标签: c# multithreading keyboard


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢你,这非常简单:)
    猜你喜欢
    • 2017-10-21
    • 2014-08-13
    • 1970-01-01
    • 2012-02-20
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    相关资源
    最近更新 更多