我想在Winforms项目中添加进度条,但遇到了问题。
在这种情况下,它不会在2秒后关闭
private void button1_Click(object sender, EventArgs e)
{
Form1 form1 = new Form1();
form1.ShowDialog();
System.Threading.Thread.Sleep(2000);
form1.Close();
}
在这种情况下,进度条不会移动
private void button1_Click(object sender, EventArgs e)
{
Form1 form1 = new Form1();
form1.Show();
System.Threading.Thread.Sleep(2000);
form1.Close();
}
请问这个问题怎么解决?或者Visual Studio中有更好的进度条插件吗?
2条答案
按热度按时间cnwbcb6i1#
在第一种情况下,代码在
ShowDialog
处阻塞,因此在窗体关闭之前无法执行关闭窗体的行。在第二种情况下,您正在休眠UI线程2秒,同时期望UI线程更新
ProgressBar
。你睡着的时候能工作吗?这里的解决方案是使用另一种形式的
Timer
。将其Interval
设置为2000,然后在其Tick
事件处理程序中关闭窗体。这样,您可以调用ShowDialog
,这样第一个表单就无法访问,但第二个表单仍将在2秒后关闭。x759pob22#
jmcilhinney已经解释得很清楚了,你需要很好地理解线程问题。
这里有一个不需要使用计时器的方法,请参考下面的代码: