引数が与えられ、Graphicsのオブジェクトを介して画面にレンダリングするプログラムがあります。私はメインスレッドでConsole.Read()を持っているので、スレッド上ではすべて実行されています。Console.Read()の後でスレッドがスタックする
gw.init();
Thread workerThread = new Thread(new ThreadStart(doRenderLoop));
workerThread.Start();
Console.Read();
running = false;
workerThread.Join();
そして、これはレンダリングループです:
try
{
while (running)
{
gw.render();
Thread.Sleep(1000/30);
}
}
catch (Exception)
{
throw;
}
}
そして、これがあるgw.render:
wg.Clear(bgColor);
wg.Flush();
(はbgColorが道でColor.BLACKです)
からタスクマネージャが言うことは、私のウィンドウは問題ありません。 私の窓を見ると、焦点が合っておらず、反応していない状態にとどまるでしょう。 picture
ご協力いただければ幸いです。
EDIT 1:私はエリのポストを試しても、まだ運がありませんでした。これは新しいレンダーループコードです。
gw = new GameWindow(800, 600, "Test");
gw.init();
gw.render();
try
{
while (running)
{
gw.render();
Thread.Sleep(1000/30);
}
}
catch (Exception)
{
throw;
}
私はまだ同じ結果を得ています。コードの最初の3行はメインスレッドにありません。
EDIT 2:私はスレッドを稼働させて、すべてが正しく表示されます。しかし、私はまだ窓に焦点を当てることができないようだ。また、待ち時間が少なすぎて速くなりました。
キーが押されるまでウィンドウを30回レンダリングしますか? GameWindowの基本タイプは何ですか? Init()ではどうなりますか? –
GameWindowは、すべてのグラフィックスを処理するための単なるラッパーでした。 Initはウィンドウを作成して表示し、Renderはうまくレンダリングします。私の計画は、30回/ s、または60回/ sを実行し、コンソールでの入力を待って、プログラムを処分して終了させることでした。また、あなたの投稿はうまくいったが、上の編集で説明されているように、何らかの理由でウィンドウが表示されない。だから私はいくつかのボタンがある場合、私はそれに焦点を当てることができないので、彼らは動作しませんでした。 –
あなたはこれについて間違った方法をとっています。あなたは、コンソールプロジェクトではなくwinformプロジェクトから始める必要があります。これにより、Application.Runのどこかにあなたのウィンドウが表示されます。次に、 'System.Windows.Form.Timer'を追加して、レンダリングメソッドを定期的に呼び出すことができます。プログラムを閉じるには、ウィンドウの「x」を押してください。これらのスレッドはすべて必要はなく、確かにコンソール用ではありません。 –