1

一个问题解决了,另一个问题随之而来:在 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 文件时,有什么办法可以强制标签保持绿色?

4

2 回答 2

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 线程上完成的。

于 2011-02-27T17:54:18.300 回答
0

尝试挂钩 PlayStateChanged 事件并将其放入label1.ForeColor = Color.Black;其中。

目前,您的代码中没有任何内容表明它应该只在完成后才变为黑色,只有在它开始播放之后。

于 2011-02-27T17:54:18.627 回答