1

所以我正在尝试使用声音播放器来加载 wav 文件,然后在加载完成后触发一个事件。原因是我不希望我的程序在 WAV 完全加载并准备好之前继续运行(如果有其他方法可以做到这一点,请告诉我)。

但不幸的是,LoadCompleted 事件永远不会触发!

这是我尝试的最后一个。我究竟做错了什么?

this.audio = new SoundPlayer(); 
audio.SoundLocation = "songs\\" + songname + ".wav"; 
audio.LoadAsync();

属于歌曲数据对象。然后我有这是主类的主要方法:

this.songdata.audio.LoadCompleted += new AsyncCompletedEventHandler(audio_LoadCompleted);

this.songdata.audio.Play();

最后在主类中:

void audio_LoadCompleted(object sender, AsyncCompletedEventArgs e)
{
    MessageBox.Show("aaa");
}

文件开始播放,但消息框永远不会出现。顺便说一句,我正在使用 Visual Studio 2010 和 .NET 4.0。

4

1 回答 1

1

我得到了以下代码来向我发送一个 LoadCompleted 事件,但是,我有一个与 SoundPlayer 对象在同一个类中的“事件回调函数”。

class MediaPlayer{

System.Media.SoundPlayer soundPlayer;

public MediaPlayer(MemoryStream stream){
   soundPlayer = new System.Media.SoundPlayer(stream);
   soundPlayer.LoadCompleted += new AsyncCompletedEventHandler(player_LoadCompleted);
   soundPlayer.Load();
}

public void Play(){

   soundPlayer.Play();

}

// Handler for the LoadCompleted event.
private void player_LoadCompleted(object sender, AsyncCompletedEventArgs e){   
   Console.WriteLine("LoadCompleted"); 
} 
}
于 2018-05-08T06:27:45.400 回答