天天看點

C#多線程的實作

首先,上個多線程的概念。通過單獨的線程來執行某個任務,一個多線程程式可以執行多個任務,而且這些線程都是并行執行,同時執行多個線程的能力稱為多線程。

根據多線程的概念,我們知道,多線程可以提高程式的運作效率,加快運作的速度。比較典型的應用就是我們經常使用的下載下傳工具,就用到了多線程技術。

下面上一段代碼,看一下C#中如何實作多線程。

我們在控制台項目中,鍵入如下代碼:

Main函數中定義了3個線程的線程數組,然後循環調用。

這是一個普通的方法,用于測試線程的執行情況。

我們發現在ActionMethod方法中,lock(this)這一行被注釋掉了。

我們看一下運作狀況。

這是沒加lock(this)的運作情況                      這是加了lock(this)的運作情況

C#多線程的實作
C#多線程的實作

這就引出了一個線程同步的概念。也就是說,我們在程式中想辦法,對多個線程的執行進行協調,使線程按照順序來執行。線程同步的意思并不是說多個線程保持同樣的次序輸出,而是說單獨的線程執行不被其他線程所幹擾,要執行下一個線程必須等待該線程結束才能進行。這樣才能保證多個線程輸出的一緻和同步。

說到這裡,我想有人想問,多個線程同時執行,我怎麼去對他們執行的優先級進行控制呢?比如,我想讓線程1的活先幹完,然後讓線程2的活幹完,最後是線程3的活幹完。

這是很自然的需求,C#很友善的進行了實作。

還是利用上面的代碼,線上程執行之前,我們加下面這3行代碼。

最後,我們将做一個累加器,用多線程來實作。

首先我們畫一個winform界面

C#多線程的實作

然後我們再開始計算按鈕下面輸入如下代碼(這裡的控件名沒改,讀者自行修改):

Add方法是一個核心方法,将需要計算的範圍按照線程數進行分割,這樣讓每個線程獨自的完成自己的任務,而不是一個線程從頭跑到尾。OK,我們檢視一下運作效果圖:

C#多線程的實作

這裡可以看到每個線程的運作情況和執行情況。