C# 在C语言中暂停执行

C# 在C语言中暂停执行,c#,C#,我有一个程序,我想显示一个文本,等待2秒钟,然后退出。当我运行它时,它会等待两秒钟并退出,但不会显示文本 代码: 有什么想法吗?尝试使用计时器而不是线程。睡眠。我无法从您的代码中判断,但您可能在GUI线程中,这会阻止屏幕被重新绘制。thread.Sleep在指定的时间内阻止当前线程,并且您在UI线程中,该线程用于更新标签。改变这一点的最简单方法可能是添加一个计时器控件,您似乎正在使用间隔为2000的Windows窗体: 而不是睡觉和离开 CloseTimer.Start(); 通常,您还可以通

我有一个程序,我想显示一个文本,等待2秒钟,然后退出。当我运行它时,它会等待两秒钟并退出,但不会显示文本

代码:


有什么想法吗?

尝试使用计时器而不是线程。睡眠。我无法从您的代码中判断,但您可能在GUI线程中,这会阻止屏幕被重新绘制。

thread.Sleep在指定的时间内阻止当前线程,并且您在UI线程中,该线程用于更新标签。改变这一点的最简单方法可能是添加一个计时器控件,您似乎正在使用间隔为2000的Windows窗体:

而不是睡觉和离开

CloseTimer.Start();
通常,您还可以通过以下几种方式之一启动另一个线程,包括但不限于:

使用全线程:

Thread t = new Thread(delegate {
    Thread.Sleep(2000);
    Environment.Exit(-1);
});

t.Start();
使用任务,如@Max写入;这特别好

使用Application.DoEvents但不使用;这是邪恶的,你的用户界面仍然会锁定,只要有一个正确的标签;在一个循环中这样做是多余的;使用另一种方法

我想你的Thread.Sleep2000正在阻塞UI线程。请试一试

private void Form1_Load(object sender, EventArgs e)
{
    label1.Text = "You guessed the correct number. Program is exiting";
    label1.BackColor = Color.LightGreen;
    Task.Factory.StartNew(Sleep).ContinueWith(t => Exit());
}

private void Sleep()
{
    Thread.Sleep(2000);
}

private void Exit()
{
    Environment.Exit(-1);
}
您可以使用Application.DoEvents请求Windows重新绘制标签

if (userNumber == selectedNumber)
{
    userMSGLabel.Text = "You guessed the correct number. Program is exiting";
    userMSGLabel.BackColor = Color.LightGreen;
    Application.DoEvents();
    System.Threading.Thread.Sleep(2000);
    Environment.Exit(-1);
}

您可以尝试在Thread.Sleep调用之前添加Application.DoEvents,该调用将在线程进入睡眠之前呈现屏幕。否则,我会按照下面答案的建议使用计时器,原因如下:为什么要使用Environment.Exit来结束程序?你不能直接调用主窗体的Close方法吗?@JimMischel-他可能必须使用Environment。如果他需要自定义返回码,比如-1,请退出。@icemanind:还有其他方法可以做到这一点。例如,只需设置,然后调用Close方法。
private void Form1_Load(object sender, EventArgs e)
{
    label1.Text = "You guessed the correct number. Program is exiting";
    label1.BackColor = Color.LightGreen;
    Task.Factory.StartNew(Sleep).ContinueWith(t => Exit());
}

private void Sleep()
{
    Thread.Sleep(2000);
}

private void Exit()
{
    Environment.Exit(-1);
}
if (userNumber == selectedNumber)
{
    userMSGLabel.Text = "You guessed the correct number. Program is exiting";
    userMSGLabel.BackColor = Color.LightGreen;
    Application.DoEvents();
    System.Threading.Thread.Sleep(2000);
    Environment.Exit(-1);
}