目录
一、涉及到的知识点
1.Sleep(Int32)方法
2.Parallel.Invoke方法
二、 实例:用Sleep方法动态时间
一、涉及到的知识点
在使用线程时,经常会用到Sleep方法,Sleep方法用于将线程挂起指定的时间,时间的单位为毫秒。本实例中将会创建一条线程,并在线程的While循环中使用Sleep方法将线程挂起一秒钟,使线程每隔一秒钟获取一次系统时间,并将系统时间显示到TextBox控件中。
本实例实现时主要用到了多线程技术和线程的Sleep方法。
实例中使用了Lambda表达式,实现了Thread类的构造方法中的ThreadStart委托所约定的方法。
1.Sleep(Int32)方法
将当前线程挂起指定的毫秒数。
public static void Sleep (int millisecondsTimeout);参数
millisecondsTimeout Int32
挂起线程的毫秒数。 如果 millisecondsTimeout 参数的值为零,则该线程会将其时间片的剩余部分让给任何已经准备好运行的、具有同等优先级的线程。 如果没有其他已经准备好运行的、具有同等优先级的线程,则不会挂起当前线程的执行。例外
ArgumentOutOfRangeException
超时值为负且不等于 Infinite。
2.Parallel.Invoke方法
详见本作者的其他文章,C#用Parallel.Invoke 方法尽可能并行执行提供的每个线程-CSDN博客 https://blog.csdn.net/wenchm/article/details/135697802?spm=1001.2014.3001.5501
二、 实例:用Sleep方法动态时间
// 使用Sleep方法动态时间
namespace _065
{public partial class Form1 : Form{private Label? label1;private static TextBox? textBox1;public Form1(){InitializeComponent();Load += Form1_Load;}private void Form1_Load(object? sender, EventArgs e){// // label1// label1 = new Label{AutoSize = true,Location = new Point(12, 8),Name = "label1",Size = new Size(188, 17),TabIndex = 0,Text = "每秒种获取一次系统时间并显示:"};// // textBox1// textBox1 = new TextBox{ForeColor = Color.Red,Location = new Point(12, 29),Multiline = true,Name = "textBox1",Size = new Size(360, 45),TabIndex = 1};// // Form1// AutoScaleDimensions = new SizeF(7F, 17F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(384, 86);Controls.Add(textBox1);Controls.Add(label1);Name = "Form1";StartPosition = FormStartPosition.CenterScreen;Text = "用Sleep方法动态显示时间";Sleep_Func();}private static void Sleep_Func(){Thread th = new( //创建线程对象() => //使用Lambda表达式{while (true) //无限循环{Parallel.Invoke(//在窗体线程中执行() => //使用Lambda表达式{textBox1!.Text = //显示系统时间DateTime.Now.ToString("F");});Thread.Sleep(1000); //线程挂起1000毫秒}}){IsBackground = true //设置线程为后台线程};th.Start(); //开始执行线程}}
}