1

スレッド内のフォームで何かを表示または変更するために、いくつかのデリゲートを使用しています。イベント方式は以下のようになります。

private void PictureBoxImageSet(PictureBox PictrBox, Image Img)
{
    try
    {
        PictrBox.BeginInvoke((ThreadStart)delegate()
        {
            PictrBox.Image = Img;
        });
        Thread.Sleep(FORM_ITEM_INVOKE_TASK_SLEEP_VALUE);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
}

常にThread.Sleep()メソッドを使用する必要がありますか?これを削除すると、ソフトウェアはこの変更によってどのように影響を受けますか?この種のイベントでのスレッドスリープ値はどうなりますか?

4

1 に答える 1

3

関数PictureBoxImageSetが呼び出されるコードは、thread.sleepで使用される時間の遅延なしにさらに実行を続行します。

画像の変更に関するイベントを使用している場合、他のスレッドが画像データに基づいて何らかのジョブを実行すると、影響が生じる可能性があります。

このジョブを同期的に完了したい場合は、PictrBox.Invokeメソッドを呼び出して、thread.sleepを削除します。コードをさらに実行する前に、イメージを設定することが保証されます。

于 2012-06-04T07:09:37.977 に答える