1

1 つの問題が解決され、別の問題が続きました。C# プログラムで、次の方法を使用してラベルの色を緑に設定し、mp3 ファイルを再生して、最後に色を黒に戻します。問題は、サウンドが余分なスレッドで再生されているように見えるため、2 つの色の変化の間の時間が短すぎることです (実際、ファイルの再生中は緑色になるはずです)。

private void playSound()
    {
        label1.ForeColor = Color.LimeGreen;
        Application.DoEvents();

        WMPLib.WindowsMediaPlayer wmp = new WMPLib.WindowsMediaPlayer();
        wmp.URL = @"C:\examplesound.mp3"; // duration about 30s
        wmp.controls.play();

        label1.ForeColor = Color.Black;
    }

mp3 ファイルの再生中にラベルを強制的に緑色に保つ方法はありますか?

4

2 に答える 2

3

再生は別のスレッドで行われるため、すぐに色を黒に戻さないでください。

現在のトラックが終了すると、WMPLib がPlayStateChangeイベントを送信します。

したがって、ハンドラーを追加します。

wmp.PlayStateChange += this.Player_PlayStateChange;

private void Player_PlayStateChange(int newState)
{
    if ((WMPLib.WMPPlayState)newState == WMPLib.WMPPlayState.wmppsStopped)
    {
        label1.ForeColor = Color.Black;
    }
}

のページにplayStateは値のリストがあります:

8 - MediaEnded - メディア アイテムの再生が完了しました。

これが UI スレッドで行われていることを確認する必要があります。

于 2011-02-27T17:54:18.300 に答える
0

PlayStateChanged イベントをフックしてlabel1.ForeColor = Color.Black;、そこに入れてみてください。

現時点では、再生が開始された後にのみ、終了時にのみ黒に変更する必要があると言っているコードはありません。

于 2011-02-27T17:54:18.627 に答える