[英]Trying to make label display text, wait, then close the program (C#)
嗨,我一直在尝试向我的程序中添加一个按钮,当您单击该按钮时,它会在标签中显示文本,等待用户读取它,然后退出程序。 但是如果我运行它并尝试,它只会等待,然后退出而不显示文本。 抱歉,如果这是一个不好的解释,我刚开始编码。 这就是我所拥有的。
private void button3_Click(object sender, EventArgs e)
{
label1.Text = "Text Here";
Thread.Sleep(500);
this.Close();
}
调用label1.Invalidate()
强制重新绘制控件。 当您调用Thread.Sleep
,UI线程将被阻止并且不会更新。
如果这不起作用,请尝试label1.Refresh()
或Application.DoEvents();
label1.Refresh()
private void button3_Click(object sender, EventArgs e)
{
label1.Text = "Text Here";
label1.Invalidate();
Thread.Sleep(500);
this.Close();
}
一个更理想的解决方案是使用计时器,另一个线程或某种异步事件来与UI分开运行代码:
timer = new Timer();
timer.Interval = 500;
timer.Tick += (sender, e) => Close();
timer.Start();
要么
new Thread(delegate() {
Thread.Sleep(500);
this.Close();
}).Start();
还要注意,500毫秒是很短的时间,您是说5000毫秒,相当于5秒钟吗? 您可能还想看看Winforms:Application.Exit与Enviroment.Exit与Form.Close ,因为Close()
关闭 当前窗口。
与其使用Thread.Sleep
阻止UI线程(并使其不随文本更新),不如让UI保持响应状态更好。 这将使UI正常工作并延迟然后关闭应用程序。
private void button3_Click(object sender, EventArgs e)
{
label1.Text = "Text Here";
Task.Delay(5000).ContinueWith((arg) => Application.Exit());
}
Task
在另一个线程中运行,延迟指定的毫秒数(在这种情况下为5000或5秒),然后继续调用以关闭应用程序。
顺便说一句,仅当您从中运行应用程序的表单是应用程序的“初始”表单时, this.Close()
才能关闭该应用程序。 如果您从另一个子窗体中运行了相同的代码,则只会关闭该窗体。 如果要实际关闭应用程序,更好的方法是使用Application.Close()
方法。 这将正常关闭应用程序。 如果要完全终止,可以使用Environment.Exit(int)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.