我在dll文件中导出了xna游戏。运行游戏的所有内容(内容除外)都在此库中,尤其是主游戏类。
在另一个程序集中,我加载游戏dll,实例化游戏类并在其上调用Run()
。这将运行游戏。之后,当游戏关闭时,我打电话给Dispose()
完全关闭游戏。主程序(加载dll的程序)仍在运行。
到此为止,没有问题。
但是,当游戏使用Song
和MediaPlayer
时,似乎游戏并未完全关闭。在游戏的内容目录中,该歌曲有相应的.xnb
和.wma
个文件。虽然游戏不再运行,但我无法删除.wma
文件,因为进程(我的主程序)仍然拥有此文件的句柄。可以毫无问题地删除.xnb
文件。
我发现游戏创建了一个额外的线程,在游戏退出后没有关闭。我怀疑这个线程是一个仍然保存文件句柄的媒体播放器线程。有没有办法强制xna放弃文件句柄?也许杀掉额外的线程会是一个选择(尽管它不是很好),但是怎么做呢?
在Stop()
上调用MediaPlayer
不会改变此行为。
答案 0 :(得分:0)
通常,创建XNA游戏时的一般做法是根本不使用MediaPlayer,而是使用Sound& amp; SoundInstance替代方案。虽然它们可能使用不同的声音格式,但它们的性能更好,因为MediaPlayer是一个巨大的生猪,在你的情况下,线程问题。
我可能错了,但我认为MediaPlayer实际上调用本地机器实际的MediaPlayer。这可能是为什么很难阻止它的原因之一。
这取决于你,但我会完全避开MediaPlayer。这对我来说是个诅咒:D