游戏退出后保存wma文件的句柄

时间:2012-06-26 14:48:36

标签: .net xna filehandle

我在dll文件中导出了xna游戏。运行游戏的所有内容(内容除外)都在此库中,尤其是主游戏类。

在另一个程序集中,我加载游戏dll,实例化游戏类并在其上调用Run()。这将运行游戏。之后,当游戏关闭时,我打电话给Dispose()完全关闭游戏。主程序(加载dll的程序)仍在运行。

到此为止,没有问题。

但是,当游戏使用SongMediaPlayer时,似乎游戏并未完全关闭。在游戏的内容目录中,该歌曲有相应的.xnb.wma个文件。虽然游戏不再运行,但我无法删除.wma文件,因为进程(我的主程序)仍然拥有此文件的句柄。可以毫无问题地删除.xnb文件。

我发现游戏创建了一个额外的线程,在游戏退出后没有关闭。我怀疑这个线程是一个仍然保存文件句柄的媒体播放器线程。有没有办法强制xna放弃文件句柄?也许杀掉额外的线程会是一个选择(尽管它不是很好),但是怎么做呢?

Stop()上调用MediaPlayer不会改变此行为。

1 个答案:

答案 0 :(得分:0)

通常,创建XNA游戏时的一般做法是根本不使用MediaPlayer,而是使用Sound& amp; SoundInstance替代方案。虽然它们可能使用不同的声音格式,但它们的性能更好,因为MediaPlayer是一个巨大的生猪,在你的情况下,线程问题。

我可能错了,但我认为MediaPlayer实际上调用本地机器实际的MediaPlayer。这可能是为什么很难阻止它的原因之一。

这取决于你,但我会完全避开MediaPlayer。这对我来说是个诅咒:D