2

dll ファイルにエクスポートされた xna ゲームがあります。ゲームを実行するためのすべて (コンテンツを除く) は、このライブラリ、特にメインのゲーム クラスに含まれています。

別のアセンブリで、ゲーム dll を読み込み、ゲーム クラスをインスタンス化して呼び出しますRun()。これでゲームが実行されます。その後、ゲームが終了するときは、ゲームDispose()を完全に終了するように呼び出します。メイン プログラム (dll をロードしたもの) はまだ実行中です。

ここまでは、問題ありません。

ただし、ゲームで を使用するSongMediaPlayer、ゲームが完全に終了しないようです。ゲームのコンテンツ ディレクトリには、曲に応じたファイル.xnbとファイルがあります。.wmaゲームはもう実行されませんが.wma、プロセス (メイン プログラム) がまだこのファイルへのハンドルを保持しているため、ファイルを削除できません。ファイルは.xnb問題なく削除できます。

ゲームによって追加のスレッドが作成され、ゲームの終了後に閉じられないことがわかりました。このスレッドは、まだファイル ハンドルを保持しているメディア プレーヤー スレッドであると思われます。xna にファイル ハンドルを放棄させる方法はありますか? たぶん、追加のスレッドを強制終了することもオプションになるでしょう (ただし、あまり良い方法ではありません) が、それを行う方法は?

を呼び出しStop()ても、MediaPlayerこの動作は変わりません。

4

1 に答える 1

0

一般に、XNA ゲームを作成するときの一般的な方法は、MediaPlayer をまったく使用せず、代わりに Sound & SoundInstance を使用することです。それらは異なるサウンド形式を使用する場合がありますが、MediaPlayer は巨大な豚であり、あなたの場合はスレッドの問題であるため、パフォーマンスが向上します。

私はおそらく間違っていますが、MediaPlayer は実際にはローカル マシンを実際の MediaPlayer と呼んでいると思います。これが、スレッドを停止するのが非常に難しい理由の 1 つかもしれません。

それはあなた次第ですが、私は MediaPlayer を完全に避けます。それは私にとって呪いと考えられています:D

于 2012-08-12T03:59:48.680 に答える