日韩欧美人妻无码精品白浆,www.大香蕉久久网,狠狠的日狠狠的操,日本好好热在线观看

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

如何在 C# 中使用線程(Thread)

admin
2021年1月29日 9:37 本文熱度 3957

線程是進程中的最小執(zhí)行單元,多線程是指在給定時間內(nèi)擁有多個線程的能力,并且可以調(diào)度它們從而在某一時刻處理多個操作,微軟的 .Net Framework 提供了 Thread 來幫助我們完成多線程開發(fā)。

Thread 編程

要想使用 Thread,需要在程序中引用 System.Threading 命名空間,然后再提供一個供線程調(diào)度的方法,這個方法是通過 Thread 中的 ThreadStart 委托代理的,下面的代碼展示了如何創(chuàng)建線程。


Thread t = new Thread(new ThreadStart(MyThreadMethod));

線程創(chuàng)建好之后,還需要調(diào)用  Start 方法去啟動,下面的代碼展示了如何去實現(xiàn),哦,對了,上面的 MyThreadMethod 方法會在新的線程上被調(diào)度,而不是調(diào)用線程。


    class Program
    {
        static void Main(string[] args)
        {
            Thread t = new Thread(new ThreadStart(MyThreadMethod));
            t.Start();
            Console.Read();
        }
        static void MyThreadMethod()
        {
            Console.WriteLine("Hello World!");
        }
    }

展示線程狀態(tài)

一個創(chuàng)建好的線程,它的生命周期內(nèi)會有多個狀態(tài),比如:Aborted, Background, Running, Stopped, Suspended, Unstarted 等等,這些狀態(tài)在 Thread 中是用 ThreadState 枚舉表示的,如下代碼所示:


    [Flags]
    public enum ThreadState
    {
        Running = 0,
        StopRequested = 1,
        SuspendRequested = 2,
        Background = 4,
        Unstarted = 8,
        Stopped = 16,
        WaitSleepJoin = 32,
        Suspended = 64,
        AbortRequested = 128,
        Aborted = 256
    }

當(dāng)一個 Thread 對象創(chuàng)建好之后,它的狀態(tài)就是 Unstarted,然而當(dāng) Start 方法啟動之后,線程的狀態(tài)將會從 Unstarted 切換到 Running 狀態(tài),下面的代碼展示了這種輪轉(zhuǎn)。


        static void Main(string[] args)
        {
            Thread t = new Thread(new ThreadStart(MyThreadMethod));
            Console.WriteLine("The thread''s state is:" + t.ThreadState.ToString());
            t.Start();
            Console.WriteLine("The thread''s state is:" + t.ThreadState.ToString());
        }


控制線程的 前臺和后臺

一個線程要么是前臺線程要么是后臺線程,如果你是通過顯式的方式創(chuàng)建線程,它便是前臺線程,前后線程最大的區(qū)別在于:應(yīng)用程序退出的前提必須是程序內(nèi)的所有前臺線程都得到退出,相反,應(yīng)用程序的退出不依賴于后臺線程。

你可以通過 IsBackground 屬性來設(shè)置 Thread 的前臺或者后臺,下面的代碼展示了如何去實現(xiàn)。


        static void Main(string[] args)
        {
            Thread t = new Thread(new ThreadStart(MyThreadMethod));
            t.Start();
            t.IsBackground = true;
            Console.WriteLine(“The thread’s background status is: “+t.IsBackground.ToString());
            Console.Read();
        }

除了啟動線程,還可以通過 Suspend() 和 Resume() 方法來 掛起 和 恢復(fù) 線程, 值得注意的是,你只能 恢復(fù) 你之前通過 Suspend 方法 掛起的線程,如下代碼所示:


        static void Main(string[] args)
        {
            Thread t = new Thread(new ThreadStart(MyThreadMethod));
            t.Start();
            t.Suspend(); //Suspends the newly created thread
            t.Resume(); //Resumes the suspended thread
            Console.Read();
        }

值得注意的是,現(xiàn)在的 Thread.Suspend() 和 Thread.Resume() 方法都是被標記成棄用的狀態(tài)了,取而代之的做法是:使用 AutoResetEvent 和 EventWaitHandle 方法來實現(xiàn)多線程之間的同步。

設(shè)置線程優(yōu)先級

可以給一個線程賦予優(yōu)先級,從而和內(nèi)存中的其他線程爭搶 CPU 時間,在 C# 中是使用 ThreadPriority 枚舉來表示,大體上有如下值:Lowest, BelowNormal, Normal, AboveNormal 和 Highest,下面的代碼展示了如何給這兩個線程賦予優(yōu)先級。


    class Program
    {
        static void Main(string[] args)
        {
            Thread thread1 = new Thread(new ThreadStart(Method1));
            Thread thread2 = new Thread(new ThreadStart(Method2));

            thread1.Priority = ThreadPriority.Highest;
            thread2.Priority = ThreadPriority.Lowest;

            thread2.Start();
            thread1.Start();

            Console.Read();
        }
        static void Method1()
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine("First thread: " + i);
            }
        }
        static void Method2()
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine("Second thread: " + i);
            }
        }
    }


從上面的輸出結(jié)果中可以看出,Thread1 先于 Thread2 執(zhí)行完,即使 Thread2.Start 是先啟動的,是不是很好的演示了優(yōu)先級的概念。

線程是昂貴的,因為線程的整個生命周期需要消耗太多的資源,比如:初始化,上下文切換,釋放使用的資源 等等,所以在用 多線程 之前需要想好是否真的要這么做,當(dāng)用多線程的時候,適當(dāng)?shù)氖褂?nbsp;線程池 (ThreadPool) 是一個非常好的做法,畢竟線程池內(nèi)部會幫你自動創(chuàng)建,釋放,調(diào)度線程,你只需要傻傻的用即可,同時也是提升程序響應(yīng)的利器。

譯文鏈接:https://www.infoworld.com/article/3035134/how-to-work-with-threads-in-c.html


該文章在 2021/1/29 9:37:40 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

久久久久久日本无码电影| 美国三级日本三级少妇三级99r| 亚洲欧洲国产一区二区三区丨罐| 裸体美女视频国产网站三区| 五月天婷婷AV影院| 久艹视频在线观看免费| 国产日本欧美一区丶丶丶| 国产高清不卡AV| 久久精品99成人中文字幕| 在线日韩av网址| 91久久中文臀| 国产A级精品毛片| 日韩欧美电影,强制| 日韩小黄片免费看| 日本有一道免费二区入口| JULIA无码人妻中文字幕在线| 东北人妻3P混战视频| 中文一区丝袜人妻熟女| 丁香99五月热| 久久久久久久久久久久婷| 欧美亚洲日本韩国第一页| 亚洲三区二区二区在线| 熟女天堂色偷偷av| 午夜黄色小说视频| 欧美日韩综合在线图区| 欧美成人精品 一区二区三区| 国产AA无码| 欧美影院二区三区视频| 欧美一区二区射精视频| 人妻福利网址| av不卡在线观看高清| 午夜生活在线看粗| 亚洲AV无码久久久天堂成人| 久久国产精电影| 欧美日韩精品在线观看福利| 五月婷丁香在线| www.五月婷婷com| 日韩国产伦理 三级视频在线| 极品无毛熟妇| 天天视频在线免费观看黄国产| 精品久久久精品久久|