所以我在这里有一点代码......
private void button1_Click(object sender, EventArgs e)
{
if (textBox2.Text==("Tim The Enchanter") && textBox1.Text==("cave100"))
{
label2.Visible = true;
label2.Text = ("Correct");
label2.ForeColor = System.Drawing.Color.Green;
System.Threading.Thread.Sleep(1000);
this.Hide();
Form2 form2 = new Form2();
form2.Visible = true;
}
}
它基本上是一个非常原始的登录屏幕!
除了在可以看到label2文本之前表单更改为form2这一事实外,一切正常。我尝试通过添加系统等待命令来解决这个问题,但是在文本可以显示之前就会出现这种情况。我又回到了我开始的地方。
任何帮助将不胜感激!
答案 0 :(得分:4)
永远不要在WinForms中使用Thread.Sleep
进行等待
它会阻止GUI线程,用户不会更新/看到您的标签。
当然,有很多变通方法,你可以阅读它here。
最简单的方法是使用C#5.0 async
/ await
功能:
private async void button1_Click(object sender, EventArgs e)
{
if (textBox2.Text==("Tim The Enchanter") && textBox1.Text==("cave100"))
{
label2.Visible = true;
label2.Text = ("Correct");
label2.ForeColor = System.Drawing.Color.Green;
await Task.Delay(1000);
this.Hide();
Form2 form2 = new Form2();
form2.Visible = true;
}
}
答案 1 :(得分:0)
您不应该在winforms中从UI线程调用Thread.Sleep
。
单击事件处理程序需要完成其工作并快速返回,因为所有表单绘制,响应调整大小事件,响应用户输入等都发生在同一个线程上。这就是你没有看到表单重新绘制的原因 - 它没有机会,因为你暂停了用来做这件事的线程。
你需要在更多"事件驱动的"办法。例如,您可以向表单添加Timer
控件,超时为1000毫秒,以及显示/隐藏表单的Elapsed
处理程序。
然后你的按钮处理程序只将计时器Enabled
设置为true
,然后退出。
请记住在计时器的事件处理程序中停止计时器!
答案 2 :(得分:0)
试试这个:
private void button1_Click(object sender, EventArgs e)
{
if (textBox2.Text==("Tim The Enchanter") && textBox1.Text==("cave100"))
{
label2.Visible = true;
label2.Text = ("Correct");
label2.ForeColor = System.Drawing.Color.Green;
new Timer{Enabled=true,Interval=100}.Tick += (s,e) =>
{
((Timer)s).Dispose();
this.Hide();
Form2 form2 = new Form2();
form2.Visible = true;
}
}
}
在显示Form2