狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C# 線程的基本操作

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

摘要


在C#中,線程的生命周期是由多個狀態組成的,這些狀態包括線程的創建、啟動、掛起、等待、恢復和終止。

正文


1. 創建線程

線程的生命周期從創建開始。在C#中,可以通過System.Threading.Thread類的實例化來創建一個線程。創建線程時,需要指定一個將在該線程上執行的方法。

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

這里,MyMethod是一個無參方法,它定義了線程的執行內容。

2. 啟動線程

創建線程后,它處于就緒狀態,等待CPU的調度。通過調用Thread對象的Start方法來啟動線程,使其進入可運行狀態。

myThread.Start();

一旦線程開始執行,它會自動地調用其對應的方法。

3. 掛起線程

線程可以被顯式地掛起,即暫時停止執行,這通常是通過調用Suspend方法實現的。不過,需要注意的是,Suspend方法在.NET Framework 2.0之后已被棄用,因為它可能導致死鎖。現在建議使用其他同步技術,如ManualResetEventMonitor等。

4. 線程等待

線程在執行過程中,可能會因為某些條件未滿足而進入等待狀態。例如,當線程調用Join方法等待另一個線程完成時,或者使用Thread.Sleep暫停當前線程的執行。

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

5. 恢復線程

對于被掛起的線程,可以通過調用Resume方法來恢復其執行。同樣地,Resume方法也已被棄用,建議使用其他同步機制來控制線程的執行。

6. 終止線程

線程的執行可以通過多種方式結束:

  • 線程的執行方法完成執行。

  • 調用線程的Abort方法來請求終止線程。不過,Abort方法在.NET Core中已經不再支持,因為它可能導致應用程序狀態不一致。

  • 拋出未被捕獲的異常也會導致線程終止。

線程一旦終止,它的狀態變為Stopped,此時它的生命周期結束。

因為我們是用Winform做線程實例,所以需要跨線程UI操作的一些技術。

示例

一個例子,點擊開始,會在文本框中每10毫秒輸出一個點。

創建線程

通過new 一個Thread對象并指定線程執行函數創建線程。調用Start方法開啟線程

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);    }}

通過在線程函數中調用Thread.Sleep()暫停當前線程,使線程進入休眠狀態。此時線程會占用盡可能少的CPU時間。

線程等待

假設有線程t,在主程序中調用了t.Join()方法,該方法允許我們等待直到線程t完成。當線程t完成 時,主程序會繼續運行。借助該技術可以實現在兩個線程間同步執行步驟。第一個線程會等待另一個線程完成后再繼續執行。第一個線程等待時是處于阻塞狀態(正如暫停線程中調用 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 不僅僅只是空循環。謹慎實現后,它可以提供適用于一般情況的正確旋轉行為,    // 并且本身能夠在旋轉時間夠長(大致是內核轉換所需的時間長度)時自行啟動上下文切換。    //有點像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(); 這個在.Net中不支持了,只在.Net Framework中支持。

注意

在多線程編程中,正確管理線程的生命周期是非常重要的。不當的線程管理可能會導致資源泄露、死鎖或其他并發問題。因此,建議使用高級的并發和同步機制,如任務并行庫(TPL)中的Task類,它提供了更加豐富和靈活的控制方式。


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