c #WindowsMediaPlayer音频结束

时间:2014-10-22 06:24:38

标签: c# duration windows-media-player

我在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秒钟。

1 个答案:

答案 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