Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带XNA键盘输入的C#螺纹_C#_Multithreading_Xna 4.0 - Fatal编程技术网

带XNA键盘输入的C#螺纹

带XNA键盘输入的C#螺纹,c#,multithreading,xna-4.0,C#,Multithreading,Xna 4.0,我对线程技术有点陌生(对C#并不陌生,只是没有做太多线程技术)。有人能给我解释一下为什么这不起作用吗 我有一个线程,它调用一个我将调用“Loop”的方法。循环包含一个将持续运行的while循环,在while的每个循环中,我希望它检查a键是否已关闭(使用XNA框架中的Microsoft键盘类)。但出于某种原因,它从未记录到有任何东西被按下 static Thread thread = new Thread(Loop); static bool abort = false; public stat

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

我从未使用XNA,因此我并不真正“知道”,但我遇到过类似的情况,即无法从工作线程获取键盘(和其他)输入。我在谷歌上搜索发现,在新华社,情况似乎确实如此。看

因此,您需要(并且可能希望)在GUI线程中处理您的游戏输入。只要检查每个更新标记的输入就可以了。我怀疑即使它真的起作用了,您也会获得任何性能-并且您可能会引入一些有趣的同步错误;-)


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

刚刚在我的帖子中添加了一个编辑,不能把它留在这里,因为它太长了哈哈。感谢您的快速回复。再次查看您的链接,XNA的输入似乎不可线程化。那太糟糕了,哈哈。无论如何,再次谢谢你。