MP3在单独的线程中播放

时间:2011-02-27 17:49:08

标签: c# multithreading mp3 wmplib

一个问题得到了解决,另一个问题得到解决:在C#程序中,我使用以下方法将标签颜色设置为绿色,然后播放mp3文件,最后将颜色设置为黑色。 问题是声音似乎是在一个额外的线程中播放,因此两种颜色的变化之间的时间太短(实际上,在播放文件时它应该具有绿色)。

private void playSound()
    {
        label1.ForeColor = Color.LimeGreen;
        Application.DoEvents();

        WMPLib.WindowsMediaPlayer wmp = new WMPLib.WindowsMediaPlayer();
        wmp.URL = @"C:\examplesound.mp3"; // duration about 30s
        wmp.controls.play();

        label1.ForeColor = Color.Black;
    }

在播放mp3文件时,是否可以采取任何措施强制标签保持绿色?

2 个答案:

答案 0 :(得分:3)

当播放在另一个线程中时,请勿将颜色直接设置为黑色。

当前曲目结束时,WMPLib发出PlayStateChange事件。

所以添加一个处理程序:

wmp.PlayStateChange += this.Player_PlayStateChange;

private void Player_PlayStateChange(int newState)
{
    if ((WMPLib.WMPPlayState)newState == WMPLib.WMPPlayState.wmppsStopped)
    {
        label1.ForeColor = Color.Black;
    }
}

playState的页面包含值列表:

  

8 - MediaEnded - 媒体项目已完成播放。

您需要确保在UI线程上完成此操作。

答案 1 :(得分:0)

尝试挂钩PlayStateChanged事件并将label1.ForeColor = Color.Black;放在那里。

目前,您的代码中没有任何内容表示只有在它开始播放后才会变为黑色。