-1

我最近创建了一个 WPF 游戏,我们添加的最后一件事是音乐,只是一个带有循环的 mp3。

这就是我为实现它所做的。

Music = new MediaPlayer();
Music.Open(new Uri("Sounds/MyMusic.mp3", UriKind.Relative));
Music.MediaEnded += MusicEnded;
Music.Play();



private void MusicEnded(object sender, EventArgs e)
{
Music.Stop();
Music.Play();
}

游戏一直运行良好,我们使用了 3 天超过 2 小时没有问题,但有 1 天音乐刚刚停止,其他声音继续播放。

这怎么可能发生?事件处理程序可以错过 1 个事件吗?在那种情况下,我的代码将停止工作,因为没有人监控 EventHandler 或音乐。

如何改进此代码?或避免这种情况发生?

4

2 回答 2

2

尝试在音乐结束时设置位置属性而不停止和开始

对于 XNA 媒体播放器,您可以使用 IsRepeating 属性 http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.media.mediaplayer.isrepeating.aspx

于 2013-01-11T14:10:04.587 回答
2

你从 GUI 线程开始音乐吗?

如果您的 GUI 线程正忙于做其他事情并且错过了事件,那是为什么。可能会增加一些时间来进行额外的循环并尝试重复问题。

另一种重复方式:

private void MusicEnded(object sender, EventArgs e)
{
    Music.Position = TimeSpan.FromSeconds(0);
    Music.Play();
}
于 2013-01-11T14:51:26.753 回答