C#Windows窗体短时间显示图片框

时间:2016-03-27 15:56:44

标签: c# winforms

我无法在任何地方找到这个问题的答案。是否有任何命令显示指定的毫秒数的图片框?我知道我可以做thread.sleep或task.delay。但这些可以替代吗?取代的东西:

picturebox1.visible = true; 
thread.sleep(1000); 
picturebox1.visible = false;

非常感谢!

3 个答案:

答案 0 :(得分:2)

您可以使用Thread.SleepTask.Delay,也可以使用其他答案中描述的Timer

您可能不喜欢使用Task.DelayThread.Sleep因为您认为它会使您的程序进入阻塞和冻结状态。您可以在不同的主题中使用Thread.Sleep来防止冻结表单:

this.pictureBox1.Visible = true;
Task.Run(() =>
{
    Thread.Sleep(5000);
    this.Invoke(new Action(() =>
    {
        this.pictureBox1.Visible = false;
    }));
});
//Other codes which you put here, will not wait and will run immediately.
//Then after 5 seconds the picture box will be invisible again.

答案 1 :(得分:0)

private void Form1_Load(object sender, EventArgs e)
{
    picturebox1.visible = true;
    Timer MyTimer = new Timer();
    MyTimer.Interval = (1000);
    MyTimer.Tick += new EventHandler(MyTimer_Tick);
    MyTimer.Start();
}

private void MyTimer_Tick(object sender, EventArgs e)
{
    picturebox1.visible = false;
    (sender as Timer).Stop();
}

答案 2 :(得分:0)

您也可以使用GDI +执行此操作。您只需为表单的PictureBox事件添加处理程序,而不是使用Paint。在其中,使用e.Graphics.DrawImage()方法绘制图像。使用一个全局bool变量,您应该在1秒后设置为false(或者您的要求是什么)。在Paint事件中,请在绘制图像之前检查此变量。像这样:

bool DrawImage = true;

private void Form1_Load(object sender, EventArgs e)
{
  Task.Delay(1000).ContinueWith((t) =>
  {
    DrawImage = false;
    Invalidate();
  });
}

private void Form1_Paint(object sender, PaintEventArgs e)
{
  if (DrawImage)
    e.Graphics.DrawImage(YOUR_IMAGE_HERE, 0, 0);
}