C# 如何检查MediaPlayer是否已完成声音加载?

C# 如何检查MediaPlayer是否已完成声音加载?,c#,audio,media-player,C#,Audio,Media Player,我正在尝试使用MediaPlayer类(System.Windows.Media.MediaPlayer)为一个简单的游戏同时播放多个声音 为了在同一时间多次播放同一声音,我创建了自己的类,该类多次加载同一声音 下面是一个简短的例子: sound = new MediaPlayer[count]; //array of MediaPlayers //... for (int a = 0; a < count; a++) { sound[a] = new MediaPlaye

我正在尝试使用MediaPlayer类(
System.Windows.Media.MediaPlayer
)为一个简单的游戏同时播放多个声音

为了在同一时间多次播放同一声音,我创建了自己的类,该类多次加载同一声音

下面是一个简短的例子:

sound = new MediaPlayer[count]; //array of MediaPlayers

//...

for (int a = 0; a < count; a++)
{
      sound[a] = new MediaPlayer();
      sound[a].Open(new System.Uri(sp + pfad)); //load sound
}
sound=newmediaplayer[count]//媒体播放器阵列
//...
对于(int a=0;a
这是我的问题:
如果我尝试在游戏开始后不久播放一个声音,要么我听不到声音,要么我加载的第一个声音的开头将开始播放(即使我尝试播放完全不同的声音)

似乎所有这些媒体播放器(我正在加载~100)都需要一些时间来加载声音。
因此,我正在寻找一种方法来检查加载是否完成。

加载还是播放?当媒体完成播放时,将引发MediaEnded事件,当缓冲完成时,将引发BufferingEnded事件

我找到了一个解决方案:MediaOpen事件。下面是一些示例代码:

sound[a].MediaOpened += new System.EventHandler(counter); //i do this in the for-loop
//..
void Counter(object sender, System.EventArgs e)
{
    ++loadedCounter;
}
我正在计算要加载的声音,每次加载完声音后,我都会增加另一个计数器。如果这两个计数器相等,我将在sound类中启用play()方法:

if(shouldloadCounter == loadedCounter)
{
   //all sounds are ready
}

谢谢你的名单。我不确定哪个活动是我需要的。我想知道声音是否已完成加载,而不是声音是否已完全播放。我只是在播放之前将声音设置为0。(static TimeSpan startZeit=new TimeSpan(0);[…]sound[i].Position=startZeit;sound[i].Play();)看起来MediaOpen事件正是我需要的。现在测试它。我发现了一个非常奇怪的解决方案:我正在计算我想要加载的声音,每次加载完一个声音,我都会增加另一个计数器。如果这两个计数器相等,则在sound类中启用play()方法。如果(shouldlLoadCounter==loadedCounter){…}。是的,MediaOpen事件符合我的要求。再次感谢您的列表。如果我没有弄错的话,媒体播放器会在打开之前缓冲数据,这就是为什么您可以使用BufferingEnded事件。BufferingEnded事件从未出现在我的代码中。(我使用eventhandler中的MessageBox进行了测试,MessageBox从未弹出。)下面是我的代码,您应该将解决方案作为答案发布,然后将其标记为已接受。