5

我想在 C# Visual Studio 2010中制作一个图像查看器,它会在几秒钟后一张一张地显示图像:

i = 0;

if (image1.Length > 0) //image1 is an array string containing the images directory
{
    while (i < image1.Length)
    {
        pictureBox1.Image = System.Drawing.Image.FromFile(image1[i]);
        i++;
        System.Threading.Thread.Sleep(2000);
    }

当程序启动时,它会停止并只显示第一张和最后一张图像。

4

4 回答 4

16

Thread.Sleep 会阻止您的 UI 线程使用System.Windows.Forms.Timer代替。

于 2012-08-20T14:38:23.137 回答
13

使用计时器。

首先声明您的 Timer 并将其设置为每秒滴答一次,TimerEventProcessor当它滴答作响时调用。

static System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();
myTimer.Tick += new EventHandler(TimerEventProcessor);
myTimer.Interval = 1000;
myTimer.Start();

您的类将需要 image1 数组和一个 int 变量imageCounter来跟踪 TimerEventProcessor 函数可访问的当前图像。

var image1[] = ...;
var imageCounter = 0;

然后在每个刻度上写下你想要发生的事情

private static void TimerEventProcessor(Object myObject, EventArgs myEventArgs) {
    if (image1 == null || imageCounter >= image1.Length)
        return;

    pictureBox1.Image = Image.FromFile(image1[imageCounter++]);
}

像这样的东西应该工作。

于 2012-08-20T14:49:45.140 回答
0

是的,因为Thread.Sleep在 2s 期间阻塞了 UI 线程。

请改用计时器。

于 2012-08-20T14:38:45.280 回答
-1

如果您想避免使用Timer和定义事件处理程序,您可以这样做:

DateTime t = DateTime.Now;
while (i < image1.Length) {
    DateTime now = DateTime.Now;
    if ((now - t).TotalSeconds >= 2) {
        pictureBox1.Image = Image.FromFile(image1[i]);
        i++;
        t = now;
    }
    Application.DoEvents();
}
于 2014-04-13T19:43:28.640 回答