| 成員 | 類型 | 說明 |
Start() | 方法 | 啟動執行緒,開始執行委派指向的方法 |
Abort() | 方法 | 已淘汰:強制終止執行緒 (擲出 ThreadAbortException) |
Suspend()/Resume() | 方法 | 已淘汰:暫停/恢復執行緒 (極易死結) |
Join() | 方法 | 阻塞呼叫執行緒,直到目標執行緒結束 |
Interrupt() | 方法 | 中斷處於 WaitSleepJoin 狀態的執行緒 |
Name | 屬性 | 設定/取得執行緒名稱 (除錯時顯示於 Visual Studio 執行緒視窗) |
IsAlive | 屬性 | 執行緒是否已啟動且尚未結束 |
IsBackground | 屬性 | 是否為背景執行緒 (不阻止程式結束) |
Priority | 屬性 | 執行緒優先級 |
ThreadState | 屬性 | 執行緒狀態旗標組合 |
ManagedThreadId | 屬性 | 執行緒唯一識別碼 (進程內唯一) |
主執行緒
- 每個 .NET 應用程式啟動時,CLR 自動建立**主執行緒** 執行
Main 方法。
- 主執行緒為**前景執行緒** (
IsBackground = false)。
- **所有前景執行緒結束** → 程式結束 → CLR 強制終止所有背景執行緒 (不執行 finally、不呼叫 Finalize)。
- 主執行緒可透過
Thread.CurrentThread 存取自身。
建立第一個執行緒:完整步驟
- 引用命名空間:
using System.Threading;
- 定義執行緒入口方法 (符合
ThreadStart 或 ParameterizedThreadStart 簽名)。
- 實例化
Thread 物件,傳入入口方法委派。
- (可選) 設定
Name、IsBackground、Priority。
- 呼叫
Start() 啟動。
- (可選) 主執行緒呼叫
Join() 等待結束。
最簡範例
using System;
using System.Threading;
namespace FirstThreadDemo
{
class Program
{
static void Main()
{
// 1. 取得主執行緒並命名
Thread mainThread = Thread.CurrentThread;
mainThread.Name = "MainThread";
Console.WriteLine($"[{mainThread.Name}] 啟動, ID={mainThread.ManagedThreadId}, 狀態={mainThread.ThreadState}");
// 2. 建立子執行緒
Thread worker = new Thread(WorkerMethod)
{
Name = "WorkerThread",
IsBackground = false // 前景執行緒
};
// 3. 啟動
worker.Start();
// 4. 主執行緒等待子執行緒結束
worker.Join();
Console.WriteLine($"[{mainThread.Name}] 子執行緒已結束,程式結束。");
Console.ReadKey();
}
static void WorkerMethod()
{
Console.WriteLine($"[{Thread.CurrentThread.Name}] 開始工作, ID={Thread.CurrentThread.ManagedThreadId}");
for (int i = 0; i < 3; i++)
{
Console.WriteLine($"[{Thread.CurrentThread.Name}] 迴圈 {i}");
Thread.Sleep(500); // 讓出 CPU
}
Console.WriteLine($"[{Thread.CurrentThread.Name}] 工作完成");
}
}
}
執行緒命名空間與組態
- 所有多執行緒核心類別位於
System.Threading 命名空間。
- .NET Framework 專案預設已參考
mscorlib.dll,無需額外加入參考。
- .NET Core / .NET 5+ 專案內建於
System.Threading.Thread NuGet 套件 (隱含參考)。
常見誤區與最佳實踐
| 誤區 | 正確做法 |
使用 Thread.Abort() 強制結束 | 使用 CancellationToken 協同取消模式 |
使用 Thread.Suspend/Resume | 使用 Monitor.Wait/Pulse、AutoResetEvent、SemaphoreSlim 同步 |
| 大量建立 Thread (每請求一條) | 使用 ThreadPool / Task.Run / async/await 池化重用 |
| 共享資料不加鎖 | 使用 lock、Interlocked、Concurrent 集合、Immutable 集合 |
| 在 lock 內呼叫外部方法/耗時 I/O | 鎖定範圍最小化,僅保護記憶體存取 |
| 忽略背景執行緒例外 | 在執行緒入口方法最外層 try-catch 記錄例外 |
總結
行程是資源邊界,執行緒是排程單位。C# 透過 System.Threading.Thread 提供底層執行緒控制:CurrentThread 取得當前執行緒、Start 啟動、Join 等待、Sleep 讓步、Name/IsBackground/Priority 設定屬性。理解**主執行緒決定程式存活**、ThreadState 狀態機、**已淘汰 API (Abort/Suspend/Resume) 禁用**、CancellationToken 協同取消模式,是編寫健壯多執行緒程式的基石。下一階段將學習:lock/Monitor 同步、生產者-消費者模式、ThreadPool 執行緒池、Timer 定時器、Mutex 跨行程同步、現代 Task/async/await 非同步程式設計模式。
- 上一篇文章: C# 多執行緒基礎操作:Thread 類別建立、啟動、終止、Join、狀態與優先級完整指南
- 下一篇文章: C# 語言簡介:從 C/C++ 演進而來的現代化、型別安全、物件導向程式語言
Copyright ©
程式碼之家 All Rights Reserved