Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在播放mp3之前更新C#中的标签_C#_Label_Wmplib - Fatal编程技术网

在播放mp3之前更新C#中的标签

在播放mp3之前更新C#中的标签,c#,label,wmplib,C#,Label,Wmplib,我在摆弄一个小问题。在C#程序中,我有一个最初颜色为黑色的标签。播放MP3文件时,标签会变为绿色,音乐结束后,标签的颜色应为黑色 现在,音乐播放了,但标签没有更新。我使用了几个代码示例,但都不起作用。我知道is与事件和调用有关,但我必须如何更改此代码才能使其正常工作?在Java中,我使用SwingUtilities.InvokeLater()方法,但据我所知,在C#中没有对应的方法 非常感谢您的帮助 尝试添加Application.DoEvents()更改颜色后。在我看来,最好写以下内容:

我在摆弄一个小问题。在C#程序中,我有一个最初颜色为黑色的标签。播放MP3文件时,标签会变为绿色,音乐结束后,标签的颜色应为黑色

现在,音乐播放了,但标签没有更新。我使用了几个代码示例,但都不起作用。我知道is与事件和调用有关,但我必须如何更改此代码才能使其正常工作?在Java中,我使用SwingUtilities.InvokeLater()方法,但据我所知,在C#中没有对应的方法


非常感谢您的帮助

尝试添加
Application.DoEvents()更改颜色后。在我看来,最好写以下内容:

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

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

Application.DoEvents();

希望这能有所帮助。

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


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

函数
playSound
是否异步播放声音?如果是这样,由于立即调用
next
函数
playSound
通过winmm.dll中的
mciSendString
播放声音,因此您总是会使用黑色标签-我不知道此函数是否异步播放音频文件。
Application.DoEvents();