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

c# Thread類的用法詳解

 更新時間:2020年11月05日 09:15:59   作者:一只獨行的猿  
這篇文章主要介紹了c# Thread類的用法的相關資料,幫助大家更好的理解和學習c#的相關知識,感興趣的朋友可以了解下

  Thread類相對于線程池中的線程,使用者有更多的控制權。該類允許創(chuàng)建前臺線程,設置線程優(yōu)先級等。Thread類的構造函數(shù)重載為接受ThreadStart和ParameterizedThreadStart類型的委托參數(shù)。

1、給線程傳遞數(shù)據(jù)

  給線程傳遞數(shù)據(jù)的兩種方式:

  1.使用帶ParameterizedThreadStart委托參數(shù)的Thread構造函數(shù):

//定義一個數(shù)據(jù)類型,傳遞給線程
public struct Data
{
  public string Message;
}
//創(chuàng)建一個方法,將方法給線程的ParameterizedThreadStart委托
static void ThreadMainWithParameters(object obj)
{
  Data d = (Data)obj;
  Console.WriteLine("Running in a thread, received {0}", d.Message);
}
static void Main()
{
  Data d = new Data { Message = "Info" };//創(chuàng)建一個數(shù)據(jù)實例
  Thread t2 = new Thread(ThreadMainWithParameters);//創(chuàng)建線程
  t2.Start(d);//啟動線程,并傳遞參數(shù)
}

  2.自定義一個類,把線程的方法定義為實例方法,然后初始化實例的數(shù)據(jù)后啟動線程。

//定義一個類,用于存放線程需要的數(shù)據(jù)和線程啟動的方法
public class MyThread
{
  private string data;//線程數(shù)據(jù)

  public MyThread(string data)
  {
    this.data = data;
  }
  //線程啟動方法
  public void ThreadMain()
  {
    Console.WriteLine("Running in a thread, data: {0}", data);
  }
}
static void Main()
{
  MyThread obj = new MyThread("info");//創(chuàng)建實例信息
  Thread t3 = new Thread(obj.ThreadMain);//啟動實例方法
  t3.Start();
}

2、后臺線程

  如果應用程序內(nèi)有任何一個前臺線程在運行,那么應用程序就在運行。Thread類創(chuàng)建的線程默認時前臺線程,線程池中創(chuàng)建的線程是后臺線程。在使用Thread類創(chuàng)建線程時,可以設置IsBackground屬性,以設置創(chuàng)建的Thread線程時后臺線程還是前臺線程。例如:

//創(chuàng)建線程方法,以在主線程中調(diào)用
static void ThreadMain()
{
  Console.WriteLine("Thread {0} started", Thread.CurrentThread.Name);
  Thread.Sleep(3000);
  Console.WriteLine("Thread {0} completed", Thread.CurrentThread.Name);
}
static void Main()
{
  Thread t1 = new Thread(ThreadMain);  t1.Name = "MyNewThread";
  t1.Start();   Thread.Sleep(100);
  Console.WriteLine("Main thread ending now...");
  /*******************輸出********************     *          Thread MyNewThread started
   *     Main thread ending now...
   *     Thread MyNewThread completed
   * *****************************************/
}

  可以看到,主線程先完成任務。但是主線程內(nèi)啟動的新線程是前臺線程(默認),導致主線程結(jié)束任務后,新線程仍在寫入控制臺輸出。如果在線程啟動前,將線程的IsBackground屬性設置為true,主線程結(jié)束時,會終止新線程的執(zhí)行(不論是否完成任務)。

static void Main()
{
  Thread t1 = new Thread(ThreadMain);
  t1.Name = "MyNewThread";
  t1.IsBackground = true;
  t1.Start();
  Thread.Sleep(100);
  Console.WriteLine("Main thread ending now...");
  /*******************輸出********************
   *     Thread MyNewThread started
   *     Main thread ending now...
   * *****************************************/
}

  后臺線程適合用于完成后臺任務。

3、線程的優(yōu)先級

  線程由操作系統(tǒng)調(diào)度。給線程指定優(yōu)先級,將影響線程調(diào)度順序。優(yōu)先級越高的線程,將會得到系統(tǒng)優(yōu)先調(diào)度在CPU上運行。如果線程在等待資源,它就會停止運行,并釋放CPU。

  線程必須等待的可能原因:響應睡眠指令、等待磁盤I/O完成、等待網(wǎng)絡包到達等。如果線程不主動釋放CPU,線程調(diào)度器就會搶占該線程。線程由一個時間量,它可以持續(xù)使用CPU,直到時間到達(如果沒有更高優(yōu)先級的線程時)。如果優(yōu)先級相同的多個線程等待CPU,線程調(diào)度器會使用一個循環(huán)調(diào)度原則,將CPU逐一交個線程使用。如果線程被其他線程搶占,那么它會排隊到最后去。

  只有優(yōu)先級相同的多個線程同時在運行時,才能用上時間量和循環(huán)規(guī)則。優(yōu)先級是動態(tài)的:如果線程是CPU密集型,一直需要CPU,而且不等待資源,其優(yōu)先級就降低為用該線程定義的基本優(yōu)先級;如果線程在等待資源,它的優(yōu)先級會提高。由于優(yōu)先級的提高,所以線程可能在下一等待結(jié)束時獲得CPU。

  線程的Priority屬性,可以設置線程的優(yōu)先級。線程指定優(yōu)先級時,可能降低其他線程的運行概率。所以,可以根據(jù)需要短暫改變優(yōu)先級。

4、控制線程

  調(diào)用Thread對象的Start()方法可以創(chuàng)建線程。但是,新線程并不是出于Running狀態(tài),而是Unstarted狀態(tài)。當線程調(diào)度器調(diào)用線程時,線程則會改為Running狀態(tài)。其ThreadState屬性可以獲得線程的狀態(tài)。

  線程類的靜態(tài)方法Sleep(),會使線程處于WaitSleepJoin狀態(tài),在等待一段時間后,線程將再次被喚醒。

  如果要停止一個線程,可以調(diào)用方法Abort()。調(diào)用該方法,會在接到終止命令的線程中拋出ThreadAbortException類型異常。捕獲該異常,可以在線程結(jié)束前做一些清理工作。如果再調(diào)用方法ResetAbort(),可能有機會再收到異常后繼續(xù)運行。如果線程沒有重置,接收到終止請求的線程的狀態(tài)就從AbortRequested改為Aborted。

  調(diào)用Join()方法可以等待線程的結(jié)束。該方法會停止當前線程,并把它設置為WaitSleepJoin狀態(tài),直到加入的線程完成。

以上就是c# Thread類的用法詳解的詳細內(nèi)容,更多關于c# Thread類的資料請關注腳本之家其它相關文章!

相關文章

  • C#語言主要語言區(qū)域

    C#語言主要語言區(qū)域

    這篇文章主要介紹了C#語言主要語言區(qū)域,C#語言區(qū)域主要包括數(shù)組、集合和 LINQ、數(shù)組等,下面文化在哪個內(nèi)容圍繞這些區(qū)域得相關資料了展開詳情,需要的小伙伴可以參考一下
    2021-12-12
  • c#系列 list詳情

    c#系列 list詳情

    這篇文章主要介紹了c#系列 list,list 本質(zhì)是一個數(shù)組,。就跟我們操作系統(tǒng)一樣,提前申請內(nèi)存大小。所以我們程序一般都有一個申請內(nèi)存,實際使用內(nèi)存,內(nèi)存碎片這幾個概念,下面?zhèn)z看文章詳細內(nèi)容吧
    2021-10-10
  • C# Request.Form用法案例詳解

    C# Request.Form用法案例詳解

    這篇文章主要介紹了C# Request.Form用法案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C#圖像對比度調(diào)整的方法

    C#圖像對比度調(diào)整的方法

    這篇文章主要介紹了C#圖像對比度調(diào)整的方法,涉及C#實現(xiàn)圖像對比度操作的相關技巧,需要的朋友可以參考下
    2015-04-04
  • 深入解析C#中的abstract抽象類

    深入解析C#中的abstract抽象類

    這篇文章主要介紹了深入解析C#中的abstract抽象類,包括定義抽象類等C#面相對象編程中的基礎知識,需要的朋友可以參考下
    2016-01-01
  • C#畢業(yè)設計之Winform零壓健身房管理系統(tǒng)

    C#畢業(yè)設計之Winform零壓健身房管理系統(tǒng)

    本文介紹了個人的《零壓健身房管理系統(tǒng)(扁平化)》的基本流程和功能點的介紹,虛心接受各位的意見,歡迎在提出寶貴的意見,大家一起探討學習
    2021-09-09
  • C#調(diào)用JS的幾種方法

    C#調(diào)用JS的幾種方法

    這篇文章主要介紹了C#調(diào)用JS的幾種方法,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-12-12
  • C#窗口實現(xiàn)單例模式的方法

    C#窗口實現(xiàn)單例模式的方法

    本文介紹了C#窗口實現(xiàn)單例模式的方法,對于一個軟件如果第二次打開程序,就把已經(jīng)啟動的那個進程的窗口放到最前端顯示,需要了解的朋友可以參考下
    2015-07-07
  • 詳解C#如何優(yōu)雅地終止線程

    詳解C#如何優(yōu)雅地終止線程

    在大多情況下,我們只關心線程的創(chuàng)建與啟動,運行,卻并不關心線程的結(jié)束或者終止。今天這篇文章,我們就以一些簡單的小例子,簡述如何有效的停止線程,僅供學習分享使用,如有不足之處,還請指正
    2023-03-03
  • C#串口通訊概念及簡單的實現(xiàn)方法

    C#串口通訊概念及簡單的實現(xiàn)方法

    這篇文章主要給大家介紹了關于C#串口通訊概念及簡單的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用C#具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-03-03

最新評論

临朐县| 德惠市| 安陆市| 方城县| 本溪| 济宁市| 宜君县| 温州市| 冷水江市| 襄垣县| 永康市| 荆州市| 新兴县| 三穗县| 威信县| 日土县| 和田县| 泽库县| 康保县| 台中县| 包头市| 岫岩| 肇庆市| 阳高县| 彰化市| 兖州市| 旬邑县| 屏山县| 旺苍县| 蒙阴县| 襄垣县| 郎溪县| 嵊泗县| 炉霍县| 班玛县| 巴林右旗| 巴马| 靖边县| 黄大仙区| 罗田县| 南岸区|