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ステートメントを記述するのではなく、イベントの1つがトリガーされるかどうかを自動的に常にチェックできます。

そうしようとすると、私が最初にテストしたのは、このXNAキーボードに関するものでした。これは、私が最初にこのシステムを構築したかった理由の1つでしたが、機能しませんでした。そこで、上記で投稿したスタンドアロンコードを作成して、以前のコードでエラーが発生したのに、それでも機能しないかどうかを確認しました。

4

1 に答える 1

2

私はXNAを使用したことがないので、実際には「知りません」でしたが、ワーカースレッドからキーボード(およびその他の)入力を取得できない同様の状況に遭遇しました。私はグーグルで検索し、XNAではこれが当てはまるように見えることを発見しました。たとえばこれを参照してください

したがって、GUIスレッドでゲーム入力を処理する必要があります(おそらく処理したいと思うでしょう)。各更新ティックで入力をチェックするだけで問題ありません。それが機能したとしても、パフォーマンスが向上するかどうかは疑わしいです-そして、いくつかの興味深い同期バグが発生する可能性があります;-)

ワーカースレッドを適切に作成しているように見えます。これは、そのためのアプリケーションではありません。

于 2012-10-26T23:57:00.060 に答える