私は、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 ::
}
}