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