Thread.Sleep无法正常工作

时间:2014-10-09 18:39:58

标签: c# multithreading sleep

所以我有一个照片框,可以在一段时间后切换某些照片。

for(int i=1;i<=7;i++)
{
    if (i == 1) { pictureBox1.Image = Properties.Resources.unu; Console.Beep();   }
    if (i == 2) { pictureBox1.Image = Properties.Resources.doi; Console.Beep();   }
    if (i == 3) { pictureBox1.Image = Properties.Resources.trei; Console.Beep();  }
    if (i == 4) { pictureBox1.Image = Properties.Resources.patru; Console.Beep(); }
    if (i == 5) { pictureBox1.Image = Properties.Resources.cinci; Console.Beep(); }
    if (i == 6) { pictureBox1.Image = Properties.Resources.sase; Console.Beep();  }
    Thread.Sleep(100);
}

注意:我已插入Console.Beep只是为了查看该程序是否进入if

我听到哔哔声但图像没有变化,它仍然是默认值。为什么呢?

2 个答案:

答案 0 :(得分:3)

因为您的应用程序在您退出循环之前不会处理事件。使用计时器。

答案 1 :(得分:1)

通过使用这样的阻止调用,您的程序无法重新输入UI代码并更新图像,直到完成后 - 这意味着它似乎无法更改。此外,根据您用于UI的内容(您可能应该用此标记您的问题!),您可能需要调用picturebox1.Update().Refresh()以强制控件重绘。

另请注意,由于操作可能会非常快,具体取决于您正在执行的操作,您需要插入Thread.Sleep(...)个调用或某种方式等待每个图像更改之间的用户输入,或者您将最多看到模糊的图像,最后只出现最后一张图像。如果您使用的框架需要您拨打.Update(),那么您也需要在图片互换之间进行此操作。