一个问题得到了解决,另一个问题得到解决:在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文件时,是否可以采取任何措施强制标签保持绿色?
答案 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;
放在那里。
目前,您的代码中没有任何内容表示只有在它开始播放后才会变为黑色。