我无法在任何地方找到这个问题的答案。是否有任何命令显示指定的毫秒数的图片框?我知道我可以做thread.sleep或task.delay。但这些可以替代吗?取代的东西:
picturebox1.visible = true;
thread.sleep(1000);
picturebox1.visible = false;
非常感谢!
答案 0 :(得分:2)
您可以使用Thread.Sleep
,Task.Delay
,也可以使用其他答案中描述的Timer
。
您可能不喜欢使用Task.Delay
或Thread.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);
}