C#使用Sleep(Int32)方法动态时间

本文介绍了如何在C#中使用Sleep方法配合Parallel.Invoke实现线程的动态挂起,以及在WindowsForms中创建一个线程,每秒更新一次系统时间并显示在TextBox控件中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、涉及到的知识点

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();               //开始执行线程
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wenchm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值