更新C#中的标签播放mp3播放

时间:2011-02-27 12:43:08

标签: c# label wmplib

我正在摆弄一个小问题。在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;
        }
    }

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:0)

尝试在换色后添加Application.DoEvents();。在我看来,最好写一些类似的东西:

    label1.ForeColor = Color.Green;
    Application.DoEvents();
    playSound();
    label1.ForeColor = Color.Black;

答案 1 :(得分:0)

我没有使用过很多线程,但是在使用一个线程时可以使用

来更新GUI
Application.DoEvents();

希望这有帮助。

答案 2 :(得分:0)

谢谢,这是有效的。我用Thread.Sleep(200)替换了wmp-object的play方法,用于测试目的 - 它可以根据需要工作。 不幸的是,如果使用播放音频文件的命令替换Thread.Sleep() - 函数,则无效。我假设音频文件是在一个单独的线程中播放的。

当然我可以通过在play() - 方法之后添加Thread.Sleep()来忽略这一点,但是有更好的方法吗?