1

我对线程有点陌生(对 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 键盘的东西,因为这是我最初想要构建这个系统的原因之一,但它没有工作。因此,我创建了我在上面发布的独立代码,以查看我在之前的代码中是否出错并且它仍然无法正常工作。

4

1 回答 1

2

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

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

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

于 2012-10-26T23:57:00.060 回答