C#使用Sleep(Int32)方法实现动态显示时间

 更新时间:2024年01月28日 08:48:33   作者:wenchm  
这篇文章主要为大家详细介绍了C#如何使用Sleep(Int32)方法实现动态显示时间,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考下

一、涉及到的知识点

在使用线程时,经常会用到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 方法尽可能并行执行提供的每个线程

二、 实例:用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();               //开始执行线程
        }
    }
}

到此这篇关于C#使用Sleep(Int32)方法实现动态显示时间的文章就介绍到这了,更多相关C#动态显示时间内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

最新评论