【问题标题】:Threading in C# with XNA KeyboadInput使用 XNA KeyboadInput 在 C# 中进行线程化
【发布时间】:2012-10-27 08:23:11
【问题描述】:

我对线程有点陌生(对 C# 并不陌生,只是没有做太多线程)。有人可以向我解释为什么这不起作用吗?

我有一个线程调用我将调用“循环”的方法。 Loop 包含一个 while 循环,它将持续运行,并且在 while 的每个循环中,我希望它检查 A 键是否已关闭(使用 XNA 框架中的 Microsoft 键盘类)。但由于某种原因,它永远不会记录正在按下任何东西。

static Thread thread = new Thread(Loop);
static bool abort = false;

public static void Begin()
{
    thread.Start();
}

private static void Loop()
{
    while (!abort)
    {
        if (Keyboard.GetState().IsKeyDown(Keys.A))
            Console.WriteLine("A pressed.");
    }
}

可能有人知道为什么永远不会调用 Console.WriteLine() 吗?

编辑:

我想我应该稍微解释一下。我实际上想要做的是在 C# 中创建类似于 ActionScript 的事件。因此,如果在包含该线程的这个单独的类中满足该条件,我想传递一个“条件”和一个“动作”来调用。这将允许我只向对象添加“事件侦听器”,它会自动不断地检查是否触发了其中一个事件,而不是让我在代码中编写 If 语句来检查事件。

在尝试这样做时,我测试的第一件事是关于这个 XNA 键盘的东西,因为这是我最初想要构建这个系统的原因之一,但它没有工作。所以我创建了我在上面发布的独立代码,看看我之前的代码是否出错,它仍然没有工作。

【问题讨论】:

    标签: c# multithreading xna-4.0


    【解决方案1】:

    我从不使用 XNA,所以我并不真正“知道”,但我遇到过类似的情况,您无法从工作线程获取键盘(和其他)输入。我搜索了一下,发现在 XNA 中似乎确实如此。见this for example

    因此您需要(并且可能想要)在 GUI 线程中处理您的游戏输入。只需检查每个更新滴答的输入就可以了。我怀疑即使它确实有效,你也会获得任何性能 - 你可能会引入一些有趣的同步错误;-)

    看起来您确实正确地创建了工作线程 - 这不是它的应用程序。

    【讨论】:

    • 刚刚在我的帖子中添加了一个编辑,因为它太长了,所以不能放在这里哈哈。感谢您的快速回复。
    • 再次查看您的链接,似乎 XNA 的输入不可线程化。好吧,这很糟糕,哈哈。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多