﻿# 以 C# 撰寫多執行緒 (Multi-threading) 相關學習資源整理

為了讓應用程式執行的更有效率，我們通常會採用 [非同步程式設計模式](http://msdn.microsoft.com/zh-tw/library/ms228969.aspx) ( [Asynchronous Programming Design Patterns](http://msdn.microsoft.com/en-us/library/ms228969.aspx) ) 或 [多執行緒處理](http://msdn.microsoft.com/zh-tw/library/3e8s7xdd.aspx) ( Managed Threading ) 的方式進行開發，尤其是多執行緒程式設計一直是許多程式設計師不敢碰或沒機會碰到的技術，我們最近就有個案子(非 Web 專案)就需要用到多執行緒進行開發，以確保程式的執行效能能夠符合客戶需求，以下我列出一些之前整理收集的參考資料，供初學者學習研究之用。

**從觀念出發**

-   [執行緒 (C# 程式設計手冊)](http://msdn.microsoft.com/zh-tw/library/ms173178.aspx)  
    這裡有用 C# 撰寫執行緒的相關說明，從觀念到範例都用，對初學者來說算是的不錯的起點
-   [Managed 執行緒處理的基本概念](http://msdn.microsoft.com/zh-tw/library/hyz69czz.aspx)  
    也是一系列從概念出發講解的文章，讓你瞭解執行緒的各個領域知識
-   [使用執行緒和執行緒處理](http://msdn.microsoft.com/zh-tw/library/e1dx6b2h.aspx)  
    教你如何建立、開始、暫停、繼續和中止執行緒
-   [Managed 執行緒處理的最佳實施方針](http://msdn.microsoft.com/zh-tw/library/1c9txz50.aspx)  
    撰寫多執行緒程式是門「藝術」，建議最好看一下這篇，吸收別人的開發經驗。
-   [執行緒處理物件和功能](http://msdn.microsoft.com/zh-tw/library/9xyf641a.aspx)  
    這裡將解說在 .NET Framework 中有哪些於執行緒有關的物件與功能，例如 [Thread](http://msdn.microsoft.com/zh-tw/library/system.threading.thread.aspx) 類別、[ThreadPool](http://msdn.microsoft.com/zh-tw/library/system.threading.threadpool.aspx) 類別、[BackgroundWorker](http://msdn.microsoft.com/zh-tw/library/system.componentmodel.backgroundworker.aspx) 類別、[Timer](http://msdn.microsoft.com/zh-tw/library/system.threading.timer.aspx) 類別、…以及其他許多相關類別。
-   [同步處理原始物件概觀](http://msdn.microsoft.com/zh-tw/library/ms228964.aspx)  
    在執行緒中不外乎要處理許多「同步處理」的需求，這篇文章說明各種同步的情況。

**多執行緒範例**

-   [C# .Net Tutorial Multithreading](https://codersource.net/2010/01/31/c-net-tutorial-multithreading/)  
    超簡單的 multi-threading 範例，展示如何利用 [lock](http://msdn.microsoft.com/zh-tw/library/c5kehkcz.aspx) 陳述式在 Thread 中安全的修改物件內容。
-   [執行緒教學課程](http://msdn.microsoft.com/en-us/library/aa288472\(zh-tw,VS.71\).aspx) ( [Threading Tutorial](http://msdn.microsoft.com/en-us/library/aa645740\(VS.71\).aspx) )  
    用四個簡單的範例帶領你進入 Threading 的世界
-   [HOW TO：建立和結束執行緒 (C# 程式設計手冊)](http://msdn.microsoft.com/zh-tw/library/7a2f3ay4.aspx)
-   [HOW TO：使用執行緒集區 (C# 程式設計手冊)](http://msdn.microsoft.com/zh-tw/library/3dasc8as.aspx)
-   [HOW TO：同步處理產生者和消費者執行緒 (C# 程式設計手冊)](http://msdn.microsoft.com/zh-tw/library/yy12yx1f.aspx)
-   [執行緒處理範例](http://msdn.microsoft.com/zh-tw/library/w1w6424a.aspx)  
    你只要安裝 Visual Studio 2008 就會有的範例，若找不到範例可以參考 [尋找範例檔案](http://msdn.microsoft.com/zh-tw/library/dekebd9a.aspx) 說明。  
    我的 Visual Studio 2008 的範例就放在:  
    **C:\\Program Files\\Microsoft Visual Studio 9.0\\Samples\\1033\\CSharpSamples.zip**  
    若要從線上下載也可以到 [Visual Studio 2008 範例](http://msdn.microsoft.com/zh-tw/bb330936.aspx) 進行下載
-   [AutoResetEvent 類別](http://msdn.microsoft.com/zh-tw/library/system.threading.autoresetevent.aspx)  
    對於 Thread 之前如何互相等待，這裡的範例我覺得簡單易懂。

**電子書**

-   [Threading in C# - Free E-book](http://www.albahari.com/threading/)  \[ [直接下載 PDF](http://www.albahari.com/threading/threading.pdf) \]  
    非常優的電子書，可以線上查看也可以下載 PDF 回來列印。

**其他相關文章**

-   [Give Your .NET-based Application a Fast and Responsive UI with Multiple Threads](http://msdn.microsoft.com/zh-tw/magazine/cc300429\(en-us\).aspx)
-   [Ordered Execution With ThreadPool](http://msdn.microsoft.com/en-us/magazine/dd419664.aspx)
