我正在摆弄一个小问题。在C#程序中,我有一个颜色最初为黑色的标签。播放MP3文件时,标签会变成绿色,音乐结束后,标签的颜色应为黑色。
现在播放音乐但标签没有更新。我使用了几个代码示例,但它们都没有工作。我知道这与事件和调用有关,但我如何更改此代码才能使其工作?在Java中我使用SwingUtilities.InvokeLater()方法,但据我所知,在C#中没有对应的这个方法。
delegate void LabelUpdate();
private void check()
{
new Thread(new ThreadStart(updateLabel)).Start();
playSound();
next(); // Used to set the label-color to black
}
private void updateLabel()
{
if (label1.InvokeRequired)
{
UpdateBox d = new LabelUpdate(updateLabel);
this.Invoke(d);
}
else
{
label1.ForeColor = Color.Green;
}
}
非常感谢任何帮助!
答案 0 :(得分:0)
尝试在换色后添加Application.DoEvents();
。在我看来,最好写一些类似的东西:
label1.ForeColor = Color.Green;
Application.DoEvents();
playSound();
label1.ForeColor = Color.Black;
答案 1 :(得分:0)
我没有使用过很多线程,但是在使用一个线程时可以使用
来更新GUIApplication.DoEvents();
希望这有帮助。
答案 2 :(得分:0)
谢谢,这是有效的。我用Thread.Sleep(200)替换了wmp-object的play方法,用于测试目的 - 它可以根据需要工作。 不幸的是,如果使用播放音频文件的命令替换Thread.Sleep() - 函数,则无效。我假设音频文件是在一个单独的线程中播放的。
当然我可以通过在play() - 方法之后添加Thread.Sleep()来忽略这一点,但是有更好的方法吗?