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

私はスレッドをあまり使用していませんが、使用できる1つのスレッドを使用しながらGUIを更新するために

Application.DoEvents();

お役に立てれば。

于 2011-02-27T12:50:05.030 に答える
0

ありがとう、それは働いています。テスト目的で、wmp-objectのplay-methodをThread.Sleep(200)に置き換えました。これは希望どおりに機能します。残念ながら、Thread.Sleep()関数をオーディオファイルを再生するコマンドに置き換えると、これは機能しません。オーディオファイルは別のスレッドで再生されると思います。

もちろん、play()メソッドの後にThread.Sleep()を追加することでこれを無視することもできますが、これを行うためのより良い方法はありますか?

于 2011-02-27T13:15:21.030 に答える