0

私が解決しようとしている症状は、XNA アプリケーションが最小化された後、しばらくの間復元されないことです。最小化ボタンをクリックしましたが、タスク バーでアプリケーションのエントリをクリックしても、アプリケーションが再開されず、最小化されたままになります。さらに、Windows の「ディン」効果音が再生されます。

アプリケーションを繰り返しクリックすると、再開することがあります。フレームごとの Update 呼び出しでアプリケーションの処理時間が短いと、問題の再現が難しくなることがわかりました。これを追加すると:

 System.Threading.Thread.Sleep(100);

その後、アプリケーションを再開することはほとんど不可能です。

Program.Main で [STAThread] を削除すると、常に完全に再開されることがわかりました。ただし、メイン メソッドで STAThread を設定する必要がある winforms OpenFileDialog を使用しているため、その属性を取り除くことはできません。

なぜこれが起こっているのか、また STAThread を使用してアプリケーションを適切に再開する方法があるかどうかについて何か考えはありますか?

編集: 内部的に私のアプリケーションは ThreadPool.QueueUserWorkItem を使用しており、その存在が原因です。これは、ThreadPool.QueueUserWorkItem を STAThread アプリケーションで使用してはならないということですか?

4

2 に答える 2

0

STAThreadAttribute のことですか? そうでない場合は、代わりにメイン メソッドに配置します。

STAThreadAttribute と ThreadPool.QueueUserWorkItem を使用していますが、この問題はありません。Sleep() は、スレッドをブロックするため、特にウィンドウの応答を停止していることに注意してください。理想的には、ゲームのメイン スレッドでスリープを使用しないでください。

于 2013-08-24T17:52:18.043 に答える