我正在为一个项目工作,在该项目中,pictureBox 用于一一显示目录中的图像。
首先我点击开始按钮。它调用一个 backgroundWorker 持续运行,直到我按下停止按钮。然后在 backgroundWorker 中,我调用了一个时间间隔为 500 毫秒的计时器。它调用事件处理程序方法。
在 evenhandler 方法中,我首先从目录中获取文件名,该文件名是数字的,并显示在名为“PicBox”的图片框中并递增,然后显示下一张图像。我使用了一个运行整个过程的 while 循环,直到我单击停止按钮。
问题是它在 500 毫秒(定时器间隔)后开始并以高速显示所有图片。我想以流的形式展示它们,这样用户就不会意识到这一切都是几个图像的组合,但不是以这种速度。
我使用了 Thread.Sleep() 但它冻结了 winform,我什至无法单击停止按钮。
图片框代码在这里:
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 ::
}
}