我在c#WinForms中播放音频使用Windows Media Player。我想在音频播放结束时显示一条消息。
我有一个单独的音频类用于播放音频,并且在我写的播放方法中:
Player = new WMPLib.WindowsMediaPlayer();
public static void play()
{
Player.controls.play();
Player.PlayStateChange += new WMPLib._WMPOCXEvents_PlayStateChangeEventHandler(Player_PlayStateChange);
}
private void Player_PlayStateChange(int NewState)
{
if ((WMPLib.WMPPlayState)NewState == WMPLib.WMPPlayState.wmppsStopped)
isComplete=true;
}
public static boolean hasCompleted()
{
return isComplete;
}
这里isComplete是一个初始化为false的布尔变量
在我的表单中,我的播放按钮的代码是:
//Play my audio
while(!hasCompleted());
//display message
问题在于,当我点击播放按钮时,我的应用程序进入无限循环。
然而,当我这样做时:
while(!hasCompleted())
MessageBox.Show("Playing");
//display message
工作正常。 为什么会这样? 我不想在播放时显示消息。 我尝试使用:
Player.currentMedia.duration
定时器或Thread.sleep应用程序的和持续时间字符串属性,但两者返回的值始终为0.
我也尝试在调用持续时间属性之前给出1-2秒的延迟但是这不起作用,因为我的一些音频轨道只有2秒钟。
答案 0 :(得分:0)
这不是最好的方法,因为您处于繁忙的等待状态,浪费了大量的CPU周期,可能无法按照您的意愿工作。我建议你使用" Event"。在这里你可以找到一个非常基本的例子:
http://www.codeproject.com/Articles/11541/The-Simplest-C-Events-Example-Imaginable http://msdn.microsoft.com/en-us/library/aa645739(v=vs.71).aspx