dll ファイルにエクスポートされた xna ゲームがあります。ゲームを実行するためのすべて (コンテンツを除く) は、このライブラリ、特にメインのゲーム クラスに含まれています。
別のアセンブリで、ゲーム dll を読み込み、ゲーム クラスをインスタンス化して呼び出しますRun()。これでゲームが実行されます。その後、ゲームが終了するときは、ゲームDispose()を完全に終了するように呼び出します。メイン プログラム (dll をロードしたもの) はまだ実行中です。
ここまでは、問題ありません。
ただし、ゲームで を使用するSongとMediaPlayer、ゲームが完全に終了しないようです。ゲームのコンテンツ ディレクトリには、曲に応じたファイル.xnbとファイルがあります。.wmaゲームはもう実行されませんが.wma、プロセス (メイン プログラム) がまだこのファイルへのハンドルを保持しているため、ファイルを削除できません。ファイルは.xnb問題なく削除できます。
ゲームによって追加のスレッドが作成され、ゲームの終了後に閉じられないことがわかりました。このスレッドは、まだファイル ハンドルを保持しているメディア プレーヤー スレッドであると思われます。xna にファイル ハンドルを放棄させる方法はありますか? たぶん、追加のスレッドを強制終了することもオプションになるでしょう (ただし、あまり良い方法ではありません) が、それを行う方法は?
を呼び出しStop()ても、MediaPlayerこの動作は変わりません。