正在尝试使标签显示文本,请稍候,然后关闭程序(C#)

正在尝试使标签显示文本,请稍候,然后关闭程序(C#),c#,C#,您好,我一直在尝试在我的程序中添加一个按钮,当您单击该按钮时,它会在标签中显示文本,等待用户阅读,然后退出程序。但如果我运行它并尝试它,它只会等待,然后退出而不显示文本。对不起,如果这是一个糟糕的解释,我刚刚开始编码。这就是我所拥有的 private void button3_Click(object sender, EventArgs e) { label1.Text = "Text Here"; Thread.Sleep(500); this.Close(); }

您好,我一直在尝试在我的程序中添加一个按钮,当您单击该按钮时,它会在标签中显示文本,等待用户阅读,然后退出程序。但如果我运行它并尝试它,它只会等待,然后退出而不显示文本。对不起,如果这是一个糟糕的解释,我刚刚开始编码。这就是我所拥有的

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()

更理想的解决方案是使用计时器、另一个线程或某种异步事件从UI中单独运行代码:

timer = new Timer();
timer.Interval = 500;
timer.Tick += (sender, e) => Close();
timer.Start();


还要注意,500毫秒是相当短的时间,你是说5000毫秒,相当于5秒?当
Close()
关闭当前窗口时,您可能还想看一看。

调用
label1.Invalidate()
强制重画控件。调用
Thread.Sleep
时,UI线程将被阻止且不会更新

如果这不起作用,请尝试
label1.Refresh()
Application.DoEvents()

更理想的解决方案是使用计时器、另一个线程或某种异步事件从UI中单独运行代码:

timer = new Timer();
timer.Interval = 500;
timer.Tick += (sender, e) => Close();
timer.Start();


还要注意,500毫秒是相当短的时间,你是说5000毫秒,相当于5秒?当
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());
}
任务在另一个线程中运行,延迟指定的毫秒(本例中为5000或5秒),然后继续调用以关闭应用程序


顺便说一下,
this.Close()
仅当运行应用程序的表单是应用程序的“初始”表单时,才可以关闭应用程序。如果从另一个子窗体运行相同的代码,它将只关闭该窗体。如果要实际关闭应用程序,最好使用
application.close()
方法。这将优雅地关闭应用程序。如果您想右下终止,可以使用
Environment.Exit(int)

而不是使用
Thread.Sleep
来阻止UI线程(并阻止它随文本更新),最好保持UI响应。这将使UI保持工作状态,并延迟然后关闭应用程序

private void button3_Click(object sender, EventArgs e)
{
    label1.Text = "Text Here";
    Task.Delay(5000).ContinueWith((arg) => Application.Exit());
}
任务在另一个线程中运行,延迟指定的毫秒(本例中为5000或5秒),然后继续调用以关闭应用程序

顺便说一下,
this.Close()
仅当运行应用程序的表单是应用程序的“初始”表单时,才可以关闭应用程序。如果从另一个子窗体运行相同的代码,它将只关闭该窗体。如果要实际关闭应用程序,最好使用
application.close()
方法。这将优雅地关闭应用程序。如果要右下终止,可以使用
Environment.Exit(int)