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

C#?線程簡單介紹及使用詳情

 更新時間:2022年08月12日 09:17:44   作者:IC00???????  
這篇文章主要介紹了C#?線程簡單介紹及使用詳情,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下

前言

用C#寫畢設的時候遇到了一個問題,就是博主的發(fā)送命令,需要循環(huán)發(fā)送,但是要我的接收是有1秒延時,于是就出現(xiàn)了,我循環(huán)發(fā)送命令,最后只收到了,最后兩條命令的值,于是在一些大佬群里問有沒有人會C#的線程鎖,得到的答復是這門語言用的人很少,于是博主翻閱資料自學了一下,學了之后就想寫出來和大家一起分享一下,除了線程鎖,順帶提一下多線程,寫的不好,不喜勿噴。

1.首先看看我們的問題

我們可以看到我們的循環(huán)得到的值會非??焖俚牡玫酱鸢?,但是我在做項目的時候需要這個循環(huán)函數(shù)等待我的接收答復,于是我們要用到線程鎖這方面的知識。

 private static object lockObj = new object();//定義線程鎖
        private int num = 0;
        private void Test()
        {
            while (true)
            {
             lock (lockObj)//鎖住這個代碼塊
                {
                    num++;
                    string name = Thread.CurrentThread.Name;//獲取線程名
                    textBox1.AppendText(name+"測試:"+num);//這個是TextBox1的追加
                    textBox1.AppendText(System.Environment.NewLine);
                    Thread.Sleep(2000);//將線程掛起,相當于停止2秒
                   
                    if (num>=10)//讓這個線程執(zhí)行10次就退出
                    {
                        break;
                    }
                }
            }
        }

這個是使用單線程完成的效果,private void Test(),我們在定義線程的時候就會在線程Thread(Test)里面定義為Test函數(shù)名,代表著,線程跑這個函數(shù),while (true)表示這個線程一直在這里跑直到退鎖,lock (lockObj)代表上鎖,把這個代碼塊鎖住直到解鎖,相當于一直在這運行,只要我們不退鎖,博主只是使用break退出,Sleep代表線程掛起,相當于停止等待了。我們使用這個可以實現(xiàn)循環(huán)函數(shù)等待答復。 

單線程只需要建立一個線程就可以啦, while (true) 可以根據(jù)自己的實例來定義線程數(shù)量,理論上是線程越多,越快,但是也要考慮線程浪費。

//單線程
            Thread thred1 = new Thread(Test);//定義一個線程
            thred1.Name = "thred1";//線程名
            thred1.IsBackground = true;//設置為后臺線程就是True
            thred1.Start();//開始執(zhí)行這個線程
            int n = thred1.ManagedThreadId;//這個線程ID的標識
            Console.WriteLine(n);

博主再使用多線程操作一下,博主建立了兩個線程跑的這個程序,通過看那個name可以看出來,一個Thread1一個Thred2,我們會發(fā)現(xiàn)博主的退出的條件是,大于或等于10就退出,理論上應該在10就停止,但是我們使用了兩個線程,在第二個線程到達的時候我們的num已經(jīng)為10了,線程一已經(jīng)退出了,所以到了11,線程二才退出,

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Forms;
namespace IC00
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;//拋 textBox1.AppendText的異常
            InitializeComponent();
        }
        private static object lockObj = new object();//定義線程鎖
        private int num = 0;
        private void Test()
        {
            while (true)
            {
             lock (lockObj)
                {
                    num++;
                    string name = Thread.CurrentThread.Name;//獲取線程名
                    textBox1.AppendText(name+"測試:"+num);//這個是TextBox1的追加
                    textBox1.AppendText(System.Environment.NewLine);
                    Thread.Sleep(2000);//將線程掛起,相當于停止2秒

                    if (num>=10)//讓這個線程執(zhí)行10次就退出
                    {
                        break;
                    }
                }
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            //單線程
            Thread thred1 = new Thread(Test);//定義一個線程,運行Test
            thred1.Name = "thred1";//線程名
            thred1.IsBackground = true;//設置為后臺線程就是True
            thred1.Start();//開始執(zhí)行這個線程
            int n = thred1.ManagedThreadId;//這個線程ID的標識
            Console.WriteLine(n);//在控制器打印線程ID
            //多個線程
            Thread thred2 = new Thread(Test);
            thred2.Name = "thred2";
            thred2.IsBackground = true;
            thred2.Start();
            int m = thred2.ManagedThreadId;
            Console.WriteLine(m);//在控制器打印線程ID,看是否是一個線程
        }
    }
}

使用雙線程可以提高我們輸出的速度,多線程的使用可以大大加快我們的速率。

到此這篇關于C# 線程簡單介紹及使用詳情的文章就介紹到這了,更多相關C# 線程使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C#中DataTable和List互轉(zhuǎn)的示例代碼

    C#中DataTable和List互轉(zhuǎn)的示例代碼

    很多場景下,我們需要將List轉(zhuǎn)換成為DataTable,本文主要介紹了C#中DataTable和List互轉(zhuǎn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • C#實現(xiàn)簡單成績管理系統(tǒng)的完整步驟

    C#實現(xiàn)簡單成績管理系統(tǒng)的完整步驟

    這篇文章主要給大家介紹了關于C#實現(xiàn)簡單成績管理系統(tǒng)的完整步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用C#具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-11-11
  • C# Email郵件發(fā)送功能 找回或重置密碼功能

    C# Email郵件發(fā)送功能 找回或重置密碼功能

    這篇文章主要為大家詳細介紹了C# Email郵件發(fā)送功能,找回或重置密碼功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • c#裝箱和拆箱知識整理

    c#裝箱和拆箱知識整理

    這篇文章主要介紹了c#裝箱和拆箱知識,裝箱和拆箱是一個抽象的概念,需要的朋友可以參考下
    2014-03-03
  • C#將異步改成同步方法示例

    C#將異步改成同步方法示例

    這篇文章主要為大家介紹了C#將異步改成同步方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • 理解C#生成驗證碼的過程

    理解C#生成驗證碼的過程

    這篇文章主要介紹了C#生成驗證碼的過程,通過實例分析C#驗證碼的生成原理,感興趣的小伙伴們可以參考一下
    2016-03-03
  • Unity實現(xiàn)領取獎勵特效

    Unity實現(xiàn)領取獎勵特效

    這篇文章主要為大家詳細介紹了Unity實現(xiàn)領取獎勵特效,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • Visual C#類的定義及實現(xiàn)方法實例解析

    Visual C#類的定義及實現(xiàn)方法實例解析

    這篇文章主要介紹了Visual C#類的定義及實現(xiàn)方法實例解析,對于新手來說有不錯的借鑒學習價值,需要的朋友可以參考下
    2014-07-07
  • C#創(chuàng)建控制Windows服務

    C#創(chuàng)建控制Windows服務

    這篇文章介紹了C#創(chuàng)建和控制Windows服務的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • System.Data.OleDb.OleDbException: 未指定的錯誤的完美解決方法

    System.Data.OleDb.OleDbException: 未指定的錯誤的完美解決方法

    本文給大家?guī)砣N有關System.Data.OleDb.OleDbException: 未指定的錯誤的完美解決方法,每種方法都很不錯,需要的朋友可以參考下
    2016-09-09

最新評論

广灵县| 海南省| 都昌县| 布尔津县| 高唐县| 沙河市| 宜都市| 大同市| 扶风县| 河南省| 年辖:市辖区| 芦溪县| 罗甸县| 镇坪县| 巢湖市| 彭泽县| 修文县| 开江县| 霸州市| 游戏| 石柱| 宜兰市| 广宗县| 沙坪坝区| 大邑县| 珠海市| 新津县| 龙口市| 临泉县| 革吉县| 琼海市| 白城市| 色达县| 鸡东县| 泸水县| 襄樊市| 花莲市| 金乡县| 盘山县| 兴文县| 米泉市|