首页 > 编程笔记 > C#笔记 阅读:22

C# Thread.Sleep():让线程休眠(附带实例)

C# 中,操作线程有很多方法,这些方法可以使线程从某一种状态过渡到另一种状态。

线程的休眠主要通过 Thread 类的 Sleep() 方法实现,该方法用来将当前线程阻塞指定的时间,它有两种重载形式,下面分别进行介绍。

1) 将当前线程挂起指定的时间,语法如下:
public static void Sleep(int millisecondsTimeout)
其中,参数 millisecondsTimeout 表示线程被阻塞的毫秒数。指定 1 以使其他可能正在等待的线程能够执行;指定 Timeout.Infinite 以无限期阻塞线程。

2) 将当前线程阻塞指定的时间,语法如下:
public static void Sleep(TimeSpan timeout)
其中,参数 timeout 表示线程被阻塞的时间量的 TimeSpan。指定持续时间为 1 毫秒,可以使其他可能正在等待的线程能够执行;指定持续时间为 -1 毫秒,可以无限期阻塞线程。

例如,下列代码用来使当前线程休眠 1 秒,代码如下:
Thread.Sleep(1000); //使线程休眠1秒

【实例】编程模拟红绿灯变化场景:红灯亮8秒,绿灯亮5秒,黄灯亮2秒,主要代码如下:
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        CheckForIllegalCrossThreadCalls = false; //使线程可以调用窗体控件
    }
    void ControlLight()
    {
        while (true)
        {
            Thread.Sleep(5000); //线程休眠5秒
            pictureBox1.Image = Image.FromFile("Yellow.png"); //黄灯
            Thread.Sleep(2000); //线程休眠2秒
            pictureBox1.Image = Image.FromFile("Red.png"); //红灯
            Thread.Sleep(8000); //线程休眠8秒
            pictureBox1.Image = Image.FromFile("Green.png"); //绿灯
        }
    }
    private void Form1_Load(object sender, EventArgs e)
    {
        Thread th = new Thread(new ThreadStart(ControlLight)); //创建线程对象
        th.Start(); //启动线程
    }
}
当运行程序时,绿灯、黄灯和红灯会循环进行显示,运行结果如下图所示。

相关文章