確認Thread.Sleep(500)的對多線程的影響范圍

本文通过实验验证了Thread.Sleep方法的作用范围仅限于调用它的线程。实验使用三个线程分别设置不同的睡眠时间,并通过进度条显示各线程的状态。

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

目的:確認Thread.Sleep(500)的影響范圍

構想:使用3個progressBar&3個線程,分別在線程內執行Thread.Sleep(500)&Thread.Sleep(1000)&Thread.Sleep(2000),查看progressBar狀態,反映出時間sleep的狀況

結果:雖然很傻,不過最終還是確認到現象,thread.sleep的影響范圍是執行thread.sleep的所在線程(雖然此前在优快云的論壇中已經獲得答案,不過證實一下心里踏實)

源碼:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace TEST
{
    public delegate void _Delegate_T(); 

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        _Delegate_T _DT_T1 = null;
        _Delegate_T _DT_T2 = null;
        _Delegate_T _DT_T3 = null;
        Thread T1 = null;
        Thread T2 = null;
        Thread T3 = null;

        private void button1_Click(object sender, EventArgs e)
        {
            T1 = new Thread(p1);
            T2 = new Thread(p2);
            T3 = new Thread(p3);

            _DT_T1 = new _Delegate_T(_DT_T_M1);
            _DT_T2= new _Delegate_T(_DT_T_M2);
            _DT_T3 = new _Delegate_T(_DT_T_M3);

            T1.IsBackground = true;
            T1.Start();

            T2.IsBackground = true;
            T2.Start();

            T3.IsBackground = true;
            T3.Start();
        }

        public void _DT_T_M1()
        {
            if (progressBar1.InvokeRequired)
            {
                progressBar1.Invoke(_DT_T1);
            }
            else
            {
                progressBar1.Increment(1);
                if (progressBar1.Value == progressBar1.Maximum)
                    progressBar1.Value = 0;
            }
        }
        public void _DT_T_M2()
        {
            if (progressBar2.InvokeRequired)
            {
                progressBar2.Invoke(_DT_T2);
            }
            else
            {
                progressBar2.Increment(1);
                if (progressBar2.Value == progressBar2.Maximum)
                    progressBar2.Value = 0;
            }
        }
        public void _DT_T_M3()
        {
            if (progressBar3.InvokeRequired)
            {
                progressBar3.Invoke(_DT_T3);
            }
            else
            {
                progressBar3.Increment(1);
                if (progressBar3.Value == progressBar3.Maximum)
                    progressBar3.Value = 0;
            }
        }

        public void p1()
        {
            while (this.T1.IsAlive)
            {
                Thread.Sleep(500);
                _DT_T1();
            }
        }
        public void p2()
        {
            while (this.T2.IsAlive)
            {
                Thread.Sleep(1000);
                _DT_T2();
            }
        }
        public void p3()
        {
            while (this.T3.IsAlive)
            {
                Thread.Sleep(2000);
                _DT_T3();
            }
        }
    }
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值