C 啟動執行緒的幾種方法

2021-05-23 15:13:53 字數 1101 閱讀 6341

c#啟動執行緒的幾種方法

一、 最常見的就是使用引數為 threadstart型別的執行緒建構函式

thread t = new thread(new threadstart(functionname));

可以寫成 thread t = new thread(functionname);   這就是最基本的建立執行緒方法。但是threadstart是無引數的委託型別,這種方法也就不能直接給執行緒函式傳遞引數。但是執行緒函式可以直接訪問他所在的類中的其他成員變數,引數可以設定在其他成員變數中,讓執行緒函式去讀取。

二、 使用引數為 parameterizedthreadstart型別的執行緒建構函式

thread t = new thread(new parameterizedthreadstart(functionname));

parameterizedthreadstart也是乙個委託型別,其委託的函式必須帶乙個object型別的引數。雖然只帶乙個object型別引數,但是可以把n個引數都包裝進乙個類物件,通過這個object引數直接把該物件傳給執行緒,也就相當於傳了n個引數,不過多了包裝這步。

三、 直接採用非同步委託呼叫

受委託的函式可以擁有任何數量和型別的引數。執行緒的本質實際上也是非同步委託呼叫,執行緒類thread也可以看成是對非同步委託呼叫的一層封裝,當然多一層封裝後靈活性就降低了(體現在引數數量和型別被限定),但是方便使用。

如果直接採取非同步委託呼叫的方式,必須自己協調多個執行緒之間的同步問題,這個工作原來是由thread類替我們完成了。換句話說,是在方便和靈活之間做乙個選擇。通常使用現成的thread類已可以應付所有操作。

四、 建立內嵌的執行緒類

這種方法把執行緒要完成的工作及其資源包裝成乙個類,符合物件導向的思想。這個類不一定要是內嵌類,但是對於winform程式來說,如果不是內嵌類,就意味著無法訪問form類上的控制項、修改程式介面。

內嵌類本身是個非常麻煩的概念。他可以訪問外部類的private成員變數和方法,但是之前必須加上乙個外部物件的引用,所以在內嵌類中通常需要有乙個成員變數用來持有對外部物件的引用,可以在內嵌類的建構函式中把外部物件的引用作為引數傳遞、賦值給該變數。有了這個引用,內嵌類才能在堆記憶體中找到外部物件,找到以後即使是外部物件中的private成員,內嵌類也是有許可權訪問的。

C 執行緒同步的幾種方法

幾種方法 我們在程式設計的時候,有時會使用多執行緒來解決問題,比如你的程式需要在後台處理一大堆資料,但還要使使用者介面處於可操作狀態 或者你的程式需要訪問一些外部資源如資料庫或網路檔案等。這些情況你都可以建立乙個子執行緒去處理,然而,多執行緒不可避免地會帶來乙個問題,就是執行緒同步的問題。如果這個問...

C 執行緒同步的幾種方法

我們在程式設計的時候,有時會使用多執行緒來解決問題,比如你的程式需要在後台處理一大堆資料,但還要使使用者介面處於可操作狀態 或者你的程式需要訪問一些外部資源如資料庫或網路檔案等。這些情況你都可以建立乙個子執行緒去處理,然而,多執行緒不可避免地會帶來乙個問題,就是執行緒同步的問題。如果這個問題處理不好...

C 執行緒同步的幾種方法

我們在程式設計的時候,有時會使用多執行緒來解決問題,比如你的程式需要在後台處理一大堆資料,但還要使使用者介面處於可操作狀態 或者你的程式需要訪問一些外部資源如資料庫或網路檔案等。這些情況你都可以建立乙個子執行緒去處理,然而,多執行緒不可避免地會帶來乙個問題,就是執行緒同步的問題。如果這個問題處理不好...