1

私は、pictureBox がディレクトリの画像を 1 つずつ表示していたプロジェクトに取り組んでいます。

まず、スタートボタンをクリックします。停止ボタンを押すまで継続的に実行される backgroundWorker を呼び出します。次に、backgroundWorker 内で、500 ミリ秒の時間間隔でタイマーを呼び出しました。イベントハンドラメソッドを呼び出します。

evenhandler メソッド内では、最初にディレクトリからファイル名を取得します。これは数値であり、「PicBox」という名前の画像ボックスに表示され、インクリメントしてから次の画像を表示します。停止ボタンをクリックするまでプロセス全体を実行する while ループを使用しました。

問題は、500ms (タイマー間隔) 後に開始され、すべての画像が高速で表示されることです。すべてがいくつかの画像の組み合わせであることにユーザーが気付かないように、それらをフローで表示したいのですが、この速度ではありません。

Thread.Sleep() を使用しましたが、winform がフリーズし、停止ボタンをクリックすることさえできません。

PictureBoxコードは次のとおりです。

if (_performReceiving)
{
    try
    {
        while (_performReceiving)
        {
            switch (firstNum)
            {
                case 0:
                case 1:
                case 2:
                case 3:
                case 4:
                case 5:
                case 6:
                case 7:
                case 8:
                case 9:
                    PicBox.Image = Image.FromFile(path + "0" + firstNum + ".png");
                    this.PicBox.SizeMode = PictureBoxSizeMode.Zoom;
                    PicBox.Refresh();
                    firstNum++;
                    break;
                default:
                    PicBox.Image = Image.FromFile(path + firstNum + ".png");
                    this.PicBox.SizeMode = PictureBoxSizeMode.Zoom;
                    PicBox.Refresh();
                    firstNum++;
                    break;
            } 
        }
    }
    catch (FileNotFoundException)
    {
        MoveTimer.Stop();
    }
}

何か提案はありますか?

編集: (コードの視覚的表示)

Form class
{
start_button clicked()
{
   //call backgroundWorker1
}

backgroundWorker1_DoWork()
{
   //create Timer1_handler
   //Timer1.Start()
}

Timer1_handler()
{
   //Process to get firstNames numeric value which passes to switch parameter

   :: This code posted on the main question ::
}
}
4

1 に答える 1