最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#多線程Thread使用示例詳解

 更新時(shí)間:2021年07月11日 17:27:34   作者:空山新雨  
這篇文章主要為大家詳細(xì)介紹了C#多線程Thread使用示例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C#多線程Thread使用的示例代碼,供大家參考,具體內(nèi)容如下

多線程:

線程生命周期狀態(tài)圖:

C#線程優(yōu)先級(jí)(概率高低):

基本使用示例:

using System;
using System.Threading;
 
namespace month_9_10._1009
{
    class Run5
    {
        /* 測(cè)試線程的調(diào)用過程
         * 主線程輸出world,子線程輸出hello
         */
        public static void showHello()
        {
            for(int i = 0; i < 100; i++)
            {
                Console.WriteLine($"Hello\t#{Thread.CurrentThread.Name}");
            }
        }
        public static void Main(string[] args)
        {
            Thread.CurrentThread.Name = "Main Thread!";
            var childThreadRef = new ThreadStart(showHello);
            Console.WriteLine("This is Main process!!!");
            var childThread = new Thread(childThreadRef);
            childThread.Name = "Child Thread!";
            childThread.Start();
            for (int i = 0; i < 100; i++)
            {
                Console.WriteLine($"World!\t#{Thread.CurrentThread.Name}");
            }
        }
    }
}

實(shí)例1:窗體標(biāo)簽循環(huán)滾動(dòng)

using System;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;
 
namespace RollMove
{
    public partial class Form1 : Form
    {
        Thread th1 = null;
        public Form1()
        {
            InitializeComponent();
            
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            int _sx = 40;
            int _ex = 280;
            int _top = 70;
            th1 = new Thread(() => {
                while (true)
                {
                    if (_sx <= _ex)
                    {
                        _ex = 280;
                        label1.Location = new Point(_sx, _top);
                        Thread.Sleep(20);
                        _sx += 5;
                    }
                    else
                    {
                        _ex = 40;
                        label1.Location = new Point(_sx, _top);
                        Thread.Sleep(20);
                        _sx -= 5;
                    }
                }
            });
            th1.Start();
        }
 
        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (th1!=null)
            {
                th1.Abort();
            }
        }
    }
}

實(shí)例2:進(jìn)度條

using System;
using System.Threading;
using System.Windows.Forms;
 
namespace month_9_10._1012
{
    public partial class Form_3 : Form
    {
        public static Print.Print print = Console.WriteLine;
        Thread th1, th2;
        public Form_3()
        {
            InitializeComponent();
            Text = "Welcome!";
            CheckForIllegalCrossThreadCalls = false;
            th1 = new Thread(new ThreadStart(Pro1));
            th1.Priority = ThreadPriority.Lowest;
            th1.Start();
            th2 = new Thread(new ThreadStart(Pro2));
            th2.Priority = ThreadPriority.Highest;
            //th2.Start();
            print(th1.Priority);
            print(th2.Priority);
            
        }
 
        void Pro1()
        {
            print("XXXXXXX");
            for (int i = 0; i <= 100; i++)
            {
                
                progressBar1.Value = i;
                label1.Text = $"{progressBar1.Value}%";
                Thread.Sleep(200);
                if (i == 20)
                {
                    th2.Start();
                    th2.Join();
                }
            }
        }
        void Pro2()
        {
            print("YYYYYYYY");
            for (int i = 0; i <= 100; i++)
            {
                progressBar2.Value = i;
                label2.Text = $"{progressBar2.Value}%";
                Thread.Sleep(100);
            }
        }
 
        private void progressBar1_Click(object sender, EventArgs e)
        {
            print("This is Main threading!");
        }
 
        private void Form_3_Load(object sender, EventArgs e)
        {
 
        }
 
        private void Form_3_FormClosing_1(object sender, FormClosingEventArgs e)
        {
            if (th1.ThreadState == ThreadState.Running)
                th1.Abort();
            if (th2.ThreadState == ThreadState.Running)
                th2.Abort();
        }
    }
}

實(shí)例三:線程同步(售票模擬)

using System;
using System.Threading;
 
namespace month_9_10._1012
{
    class Run2
    {
        static Print.Print print = Console.WriteLine;
        int _num = 10;
        void Ticket()
        {
            while (true)
            {
                //上鎖
                //lock (this)
                //{
                //    if (_num > 0)
                //    {
                //        Thread.Sleep(100);
                //        print(Thread.CurrentThread.Name + "--票數(shù):" + _num--);
                //    }
                //}
 
                //放置監(jiān)視器
                Monitor.Enter(this);
                if (_num > 0)
                {
                    Thread.Sleep(100);
                    print(Thread.CurrentThread.Name + "--票數(shù):" + _num--);
                }
                Monitor.Exit(this);
            }
        }
        static void Main()
        {
            var a1 = new Run2();
            Thread t1 = new Thread(new ThreadStart(a1.Ticket));
            t1.Name = "線程一";
            Thread t2 = new Thread(new ThreadStart(a1.Ticket));
            t2.Name = "線程二";
            Thread t3 = new Thread(new ThreadStart(a1.Ticket));
            t3.Name = "線程三";
            Thread t4 = new Thread(new ThreadStart(a1.Ticket));
            t4.Name = "線程四";
            t1.Start();
            t2.Start();
            t3.Start();
            t4.Start();
        }
    }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。 

相關(guān)文章

  • C#使用webbrowser的常見用法實(shí)例

    C#使用webbrowser的常見用法實(shí)例

    這篇文章主要介紹了C#使用webbrowser的常見用法,涉及C#使用webbrowser實(shí)現(xiàn)判斷網(wǎng)絡(luò)連接、模擬登陸、點(diǎn)擊等常用技巧,需要的朋友可以參考下
    2015-08-08
  • C# 通過Socket讀取大量數(shù)據(jù)的示例

    C# 通過Socket讀取大量數(shù)據(jù)的示例

    這篇文章主要介紹了C# 通過Socket讀取大量數(shù)據(jù)的示例,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-03-03
  • C#解決引用類型的深度克隆問題

    C#解決引用類型的深度克隆問題

    本文將給大家介紹如何讓引用類型的對(duì)象復(fù)制以后各自擁有獨(dú)立的內(nèi)存從而實(shí)現(xiàn)一個(gè)對(duì)象值的變化不會(huì)影響別的對(duì)象,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2024-08-08
  • C# 減少嵌套循環(huán)的兩種方法

    C# 減少嵌套循環(huán)的兩種方法

    最近在解決性能優(yōu)化的問題,看到了一堆嵌套循環(huán),四五層級(jí)的循環(huán)真的有點(diǎn)過分了,在數(shù)據(jù)量成萬,十萬級(jí)別的時(shí)候,真的非常影響性能。本文介紹了C# 減少嵌套循環(huán)的兩種方法,幫助各位選擇適合自己的優(yōu)化方案,優(yōu)化程序性能
    2021-06-06
  • C#使用瀏覽按鈕獲得文件路徑和文件夾路徑的方法

    C#使用瀏覽按鈕獲得文件路徑和文件夾路徑的方法

    這篇文章主要介紹了C#使用瀏覽按鈕獲得文件路徑和文件夾路徑的方法,結(jié)合實(shí)例形式分析了C#瀏覽器事件響應(yīng)及文件操作相關(guān)技巧,需要的朋友可以參考下
    2017-05-05
  • c#裝箱和拆箱知識(shí)整理

    c#裝箱和拆箱知識(shí)整理

    這篇文章主要介紹了c#裝箱和拆箱知識(shí),裝箱和拆箱是一個(gè)抽象的概念,需要的朋友可以參考下
    2014-03-03
  • C#過濾sql特殊字符串的方法

    C#過濾sql特殊字符串的方法

    這篇文章介紹了C#過濾sql特殊字符串的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • C#實(shí)現(xiàn)控制線程池最大數(shù)并發(fā)線程

    C#實(shí)現(xiàn)控制線程池最大數(shù)并發(fā)線程

    這篇文章主要介紹了C#實(shí)現(xiàn)控制線程池最大數(shù)并發(fā)線程的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • C# windows語(yǔ)音識(shí)別與朗讀實(shí)例

    C# windows語(yǔ)音識(shí)別與朗讀實(shí)例

    這篇文章主要為大家詳細(xì)介紹了C# windows語(yǔ)音識(shí)別與朗讀實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C#編程調(diào)用Cards.dll實(shí)現(xiàn)圖形化發(fā)牌功能示例

    C#編程調(diào)用Cards.dll實(shí)現(xiàn)圖形化發(fā)牌功能示例

    這篇文章主要介紹了C#編程調(diào)用Cards.dll實(shí)現(xiàn)圖形化發(fā)牌功能,結(jié)合實(shí)例形式分析了C#動(dòng)態(tài)鏈接庫(kù)調(diào)用及圖形操作技巧,需要的朋友可以參考下
    2017-06-06

最新評(píng)論

安义县| 洞口县| 贵港市| 东光县| 手游| 文水县| 阿鲁科尔沁旗| 灵川县| 开鲁县| 招远市| 山阳县| 蚌埠市| 阿拉善左旗| 巍山| 女性| 桦甸市| 永州市| 新安县| 古田县| 杭锦后旗| 镇沅| 西乌| 牟定县| 珲春市| 闵行区| 土默特左旗| 原平市| 昭通市| 随州市| 五原县| 乌鲁木齐市| 东辽县| 察哈| 阳东县| 永善县| 阿坝县| 潮安县| 郑州市| 策勒县| 黄平县| 诏安县|