繁体   English   中英

尝试使标签显示文本,等待,然后关闭程序(C#)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM