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