c# - 在 Main 中使用 Keyboard.IsKeyDown() 时出现 System.InvalidOperationException

标签 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 循环内,而退格键只是我传递的内容,因此它会刷新并继续朝同一方向前进,而不会实际移动不同。但是当我这样做时,我出现了 System.InvalidOperationException 调用线程必须是 STA,经过一些专业的谷歌搜索后,我找不到解决这个问题的方法。任何帮助都会得到应用。SAThreads aswll 的解释 :)

最佳答案

尝试向您的 Main 方法添加一个 [STAThread] 属性:

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

关于c# - 在 Main 中使用 Keyboard.IsKeyDown() 时出现 System.InvalidOperationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43033798/

相关文章:

Python 的多个循环和线程问题

android - 电话 : numeric keyboard for text input

Android 键盘在点击/焦点/requestFocus/inputmanager show_forced 时不显示

c# - 如何使用 C# 将 PDF 转换为 HTML

c# - .NET Core 3.1 和无法加载文件或程序集 System.Data.Entity,版本 = 4.0.0.0

ios - 在 iOS/Mac 上通过 GCD 实现多线程

vim - 试图理解 Vim 中删除的逻辑

c# - 从 View 中检索数据,我应该使用模型联编程序吗?

c# - 如何将已排序的整数列表重新排序为批处理,以便每个批处理的整数彼此之间的距离尽可能远?

c# - 将 C# MethodInvoker.Invoke() 用于 GUI 应用程序……这样好吗?