亚洲乱色熟女一区二区三区丝袜,天堂√中文最新版在线,亚洲精品乱码久久久久久蜜桃图片,香蕉久久久久久av成人,欧美丰满熟妇bbb久久久

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

C# 線程的基本操作

admin
2024年3月31日 1:13 本文熱度 1899

摘要


在C#中,線程的生命周期是由多個(gè)狀態(tài)組成的,這些狀態(tài)包括線程的創(chuàng)建、啟動(dòng)、掛起、等待、恢復(fù)和終止。

正文


1. 創(chuàng)建線程

線程的生命周期從創(chuàng)建開(kāi)始。在C#中,可以通過(guò)System.Threading.Thread類的實(shí)例化來(lái)創(chuàng)建一個(gè)線程。創(chuàng)建線程時(shí),需要指定一個(gè)將在該線程上執(zhí)行的方法。

Thread myThread = new Thread(new ThreadStart(MyMethod));

這里,MyMethod是一個(gè)無(wú)參方法,它定義了線程的執(zhí)行內(nèi)容。

2. 啟動(dòng)線程

創(chuàng)建線程后,它處于就緒狀態(tài),等待CPU的調(diào)度。通過(guò)調(diào)用Thread對(duì)象的Start方法來(lái)啟動(dòng)線程,使其進(jìn)入可運(yùn)行狀態(tài)。

myThread.Start();

一旦線程開(kāi)始執(zhí)行,它會(huì)自動(dòng)地調(diào)用其對(duì)應(yīng)的方法。

3. 掛起線程

線程可以被顯式地掛起,即暫時(shí)停止執(zhí)行,這通常是通過(guò)調(diào)用Suspend方法實(shí)現(xiàn)的。不過(guò),需要注意的是,Suspend方法在.NET Framework 2.0之后已被棄用,因?yàn)樗赡軐?dǎo)致死鎖。現(xiàn)在建議使用其他同步技術(shù),如ManualResetEventMonitor等。

4. 線程等待

線程在執(zhí)行過(guò)程中,可能會(huì)因?yàn)槟承l件未滿足而進(jìn)入等待狀態(tài)。例如,當(dāng)線程調(diào)用Join方法等待另一個(gè)線程完成時(shí),或者使用Thread.Sleep暫停當(dāng)前線程的執(zhí)行。

myThread.Join(); // 等待myThread線程完成
Thread.Sleep(1000); // 當(dāng)前線程暫停1秒

5. 恢復(fù)線程

對(duì)于被掛起的線程,可以通過(guò)調(diào)用Resume方法來(lái)恢復(fù)其執(zhí)行。同樣地,Resume方法也已被棄用,建議使用其他同步機(jī)制來(lái)控制線程的執(zhí)行。

6. 終止線程

線程的執(zhí)行可以通過(guò)多種方式結(jié)束:

  • 線程的執(zhí)行方法完成執(zhí)行。

  • 調(diào)用線程的Abort方法來(lái)請(qǐng)求終止線程。不過(guò),Abort方法在.NET Core中已經(jīng)不再支持,因?yàn)樗赡軐?dǎo)致應(yīng)用程序狀態(tài)不一致。

  • 拋出未被捕獲的異常也會(huì)導(dǎo)致線程終止。

線程一旦終止,它的狀態(tài)變?yōu)镾topped,此時(shí)它的生命周期結(jié)束。

因?yàn)槲覀兪怯肳inform做線程實(shí)例,所以需要跨線程UI操作的一些技術(shù)。

示例

一個(gè)例子,點(diǎn)擊開(kāi)始,會(huì)在文本框中每10毫秒輸出一個(gè)點(diǎn)。

創(chuàng)建線程

通過(guò)new 一個(gè)Thread對(duì)象并指定線程執(zhí)行函數(shù)創(chuàng)建線程。調(diào)用Start方法開(kāi)啟線程

private void btnStart_Click(object sender, EventArgs e){    Thread thread = new Thread(ShowDot);    thread.Start();}
void ShowDot(){    for (int i = 0; i < 100; i++)    {        this.Invoke((() =>        {            txtValue.Text += ".";        }));        System.Threading.Thread.Sleep(10);    }}

通過(guò)在線程函數(shù)中調(diào)用Thread.Sleep()暫停當(dāng)前線程,使線程進(jìn)入休眠狀態(tài)。此時(shí)線程會(huì)占用盡可能少的CPU時(shí)間。

線程等待

假設(shè)有線程t,在主程序中調(diào)用了t.Join()方法,該方法允許我們等待直到線程t完成。當(dāng)線程t完成 時(shí),主程序會(huì)繼續(xù)運(yùn)行。借助該技術(shù)可以實(shí)現(xiàn)在兩個(gè)線程間同步執(zhí)行步驟。第一個(gè)線程會(huì)等待另一個(gè)線程完成后再繼續(xù)執(zhí)行。第一個(gè)線程等待時(shí)是處于阻塞狀態(tài)(正如暫停線程中調(diào)用 Thread.Sleep方法一樣)

private void btnStart_Click(object sender, EventArgs e){    Thread thread = new Thread(ShowDot);    thread.Start();    thread.Join();    Thread thread1 = new Thread(ShowDot1);    thread1.Start();}
void ShowDot(){    for (int i = 0; i < 100; i++)    {        this.BeginInvoke((() =>        {            txtValue.Text += ".";        }));        System.Threading.Thread.Sleep(10);    }
}void ShowDot1(){    for (int i = 0; i < 100; i++)    {        this.BeginInvoke((() =>        {            txtValue1.Text += ".";        }));        System.Threading.Thread.Sleep(10);    }}

終止線程

private void btnStart_Click(object sender, EventArgs e){    Thread thread = new Thread(ShowDot);    thread.Start();    // SpinWait 不僅僅只是空循環(huán)。謹(jǐn)慎實(shí)現(xiàn)后,它可以提供適用于一般情況的正確旋轉(zhuǎn)行為,    // 并且本身能夠在旋轉(zhuǎn)時(shí)間夠長(zhǎng)(大致是內(nèi)核轉(zhuǎn)換所需的時(shí)間長(zhǎng)度)時(shí)自行啟動(dòng)上下文切換。    //有點(diǎn)像Sleep    SpinWait.SpinUntil(() => false, 100);    thread.Interrupt();}
void ShowDot(){    for (int i = 0; i < 100; i++)    {        this.BeginInvoke((() =>        {            txtValue.Text += ".";        }));        System.Threading.Thread.Sleep(10);    }}

thread.Abort(); 這個(gè)在.Net中不支持了,只在.Net Framework中支持。

注意

在多線程編程中,正確管理線程的生命周期是非常重要的。不當(dāng)?shù)木€程管理可能會(huì)導(dǎo)致資源泄露、死鎖或其他并發(fā)問(wèn)題。因此,建議使用高級(jí)的并發(fā)和同步機(jī)制,如任務(wù)并行庫(kù)(TPL)中的Task類,它提供了更加豐富和靈活的控制方式。


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