2

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

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

到这里为止,没有问题。

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

我发现游戏创建了一个额外的线程,游戏退出后没有关闭。我怀疑这个线程是仍然持有文件句柄的媒体播放器线程。有什么办法可以强制 xna 放弃文件句柄?也许杀死额外的线程是一种选择(虽然它不是很好),但如何做到这一点?

调用不会改变这种行为Stop()MediaPlayer

4

1 回答 1

0

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

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

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

于 2012-08-12T03:59:48.680 回答