C#線程、多線程、線程池、后台線程


System.Threading 命名空間

System.Threading 命名空間提供一些使得可以進行多線程編程的類和接口。 除同步線程活動和數據訪問的類(Monitor、Interlocked、AutoResetEvent 等)之外,此命名空間還包含一個 ThreadPool 類(它使用戶能夠使用系統提供的線程池)和一個 Timer 類(在線程池線程上執行回調方法)。 除了 System.Threading 命名空間中提供的功能之外,BackgroundWorker 類還提供一個簡單的基於事件的方法,以同步對主應用程序線程的訪問。

 

 

 

Thread 類

一個進程可以創建一個或多個線程以執行與該進程關聯的部分程序代碼。 托管線程的執行單位是方法。 使用 ThreadStart 委托或 ParameterizedThreadStart 委托可以指定由線程執行的方法。 使用 ParameterizedThreadStart 委托可以將數據作為參數傳遞到線程過程。

您不需要自己創建線程。 BackgroundWorkerThreadPool 類使您可以通過一種面向任務的簡單方式來使用系統管理的后台線程。 對於將結果返回用戶界面 (UI) 線程的后台任務,最簡單的編程方法是使用 BackgroundWorker 類。 下表列出了有關各種並發編程的一些信息來源。

任務

請參見

執行使用事件來與主應用程序線程通信的后台任務。

BackgroundWorker

執行不需要與主應用程序線程通信的后台任務。

托管線程池

保護代碼或字段區域,使其不被並發訪問。

Monitor;Visual Basic SyncLock 語句(在 C# 中為 lock 語句)

同步多個線程的活動。

EventWaitHandle、AutoResetEvent 和 ManualResetEvent

按固定的時間間隔在后台執行代碼。

Timer

按固定的時間間隔在 UI 線程上執行代碼。

DispatcherTimer

提供對數據的無鎖並發訪問。

互鎖操作

創建您自己的線程。

Thread 類;啟動時創建線程並傳遞數據

 

 

ThreadPool 類

提供一個線程池,該線程池可用於發送工作項、處理異步 I/O、代表其他線程等待以及處理計時器。線程池通過為應用程序提供一個由系統管理的輔助線程池,使您可以更為有效地使用線程。 一個線程監視排到線程池的若干個等待操作的狀態。 當一個等待操作完成時,線程池中的一個輔助線程就會執行對應的每個進程都有一個線程池。 線程池的默認大小為:每個處理器 250 個輔助線程,再加上 1000 個 I/O 完成線程。

 

 

BackgroundWorker 類

在單獨的線程上運行操作。

BackgroundWorker 類允許您在單獨的專用線程上運行操作。 諸如下載和數據庫事務這樣的耗時操作會導致用戶界面停止響應。 如果您需要能進行響應的用戶界面,而且必須執行耗時操作,則可以使用 BackgroundWorker 類方便地解決問題。

若要在后台運行操作,請創建一個 BackgroundWorker。 可以偵聽報告操作進度並在操作完成時發出信號的事件。

若要設置后台操作,請為 DoWork 事件添加事件處理程序。 在此事件處理程序中調用耗時的操作。 若要啟動后台操作,請調用 RunWorkerAsync 方法。 若要收到進度更新的通知,請處理 ProgressChanged 事件。 若要在操作完成時收到通知,請處理 RunWorkerCompleted 事件。

說明:

您必須非常小心,確保在 DoWork 事件處理程序中不操作任何用戶界面對象。 而應該通過 ProgressChangedRunWorkerCompleted 事件與用戶界面進行通信。

如果后台操作需要參數,請在調用 RunWorkerAsync 時給出參數。 在 DoWork 事件處理程序內部,可以從 DoWorkEventArgs.Argument 屬性中提取該參數。

有關 BackgroundWorker 的更多信息,請參見如何:使用后台輔助線程

 

c#的ThreadPool使用筆記(一)

http://www.cnblogs.com/sashow/archive/2007/02/08/644679.html

 

c#的ThreadPool使用筆記(二)

http://www.cnblogs.com/sashow/archive/2007/02/08/645016.html

 

C#多線程

http://blog.csdn.net/ILOVEMSDN/article/details/1735495

 

ThreadPool(線程池) in .Net

http://www.cnblogs.com/rickie/archive/2004/11/23/67275.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM