0

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

任何帮助是极大的赞赏!

4

3 回答 3

0

Application.DoEvents();换色后尝试添加。在我看来,最好写如下内容:

    label1.ForeColor = Color.Green;
    Application.DoEvents();
    playSound();
    label1.ForeColor = Color.Black;
于 2011-02-27T12:49:19.867 回答
0

我没有太多使用线程,而是在使用一个线程时让 GUI 更新,你可以使用

Application.DoEvents();

希望这可以帮助。

于 2011-02-27T12:50:05.030 回答
0

谢谢,这是有效的。出于测试目的,我用 Thread.Sleep(200) 替换了 wmp 对象的播放方法 - 它可以按需要工作。不幸的是,如果用播放音频文件的命令替换 Thread.Sleep() 函数,这将不起作用。我假设音频文件在单独的线程中播放。

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

于 2011-02-27T13:15:21.030 回答