C# c WindowsMediaPlayer音频结束

C# c WindowsMediaPlayer音频结束,c#,duration,windows-media-player,C#,Duration,Windows Media Player,我正在用WinC窗体播放音频使用Windows Media Player。我想在音频播放结束时显示一条消息 我有一个单独的音频类用于播放音频,在播放方法中,我编写了: Player = new WMPLib.WindowsMediaPlayer(); public static void play() { Player.controls.play(); Player.PlayStateChange += new WMPLib._WMPOCXEvents_PlayStateChan

我正在用WinC窗体播放音频使用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
问题是,当我单击play按钮时,我的应用程序进入无限循环

但是,当我这样做时:

 while(!hasCompleted())
    MessageBox.Show("Playing");

 //display message
它很好用。 为什么会这样? 我不想在播放时显示消息。 我尝试使用:

    Player.currentMedia.duration 
计时器或Thread.sleep应用程序的持续时间字符串属性,但两者返回的值始终为0


在调用duration属性之前,我也尝试过延迟1-2秒,但这不起作用,因为我的一些音频曲目只有2秒长。

这不是最好的方法,因为您正处于繁忙的等待状态,这会浪费大量CPU周期,并且可能无法按您的意愿工作。我建议您使用事件。在这里,您可以找到一个非常基本的示例: