天天看點

c#之線程總結(一)1 線程之委托方法 2為線程傳遞參數 3同步控件

在我們做項目的時候會經常用到線程,但線程也不是萬能的,用線程需要注意的東西也很多,自己做了一下總結

這次總結主要說三個部分

<a href="#001">1 線程之委托方法</a>

<a href="#002">2 給線程傳參</a>

<a href="#003">3 三種方法控制線程同步</a>

我們先看一下小例子:

c#之線程總結(一)1 線程之委托方法 2為線程傳遞參數 3同步控件

 在方法裡我們定義了一個 ThreadStart _ts = new ThreadStart(MyThread);

打開msdn 檢視發現這是一個委托 ,表示在 Thread 上執行的方法。

那就是說也可以這麼寫

  

Thread類有一個帶參數的委托類型的重載形式

有時個我們有好幾個參數隻傳一個參資料就不能滿足了

我們可以直接用委托要多個參數

c#之線程總結(一)1 線程之委托方法 2為線程傳遞參數 3同步控件

也可以自己寫一個中間類

三種方法lock 和Monitor 還有MethodImpl都會讓線程同步下面我們一個一個的來說

多個線程通路同一個方法時有可能會出現一個線程修改了一個參數别一個線程進入也修改了這個參數就會發生

錯誤

結果是

c#之線程總結(一)1 線程之委托方法 2為線程傳遞參數 3同步控件

根據機器的配制不同可能結果也不同

在這個方法裡我們是想讓第一個線程減10結果應該 是145

第二個線程進去後在145基礎上再減結果應該是90

現在說三種方法lock 和Monitor 還有MethodImpl 都會讓線程同步,隻有一個線程執行完後另一個線程才能通路

我們一個一個來說吧

先看一下lock

c#之線程總結(一)1 線程之委托方法 2為線程傳遞參數 3同步控件

這樣結果就對了吧

還有其它的兩種形式

用MethodImpl  要加上

 Monitor 

c#之線程總結(一)1 線程之委托方法 2為線程傳遞參數 3同步控件

結果都是正确的