天天看點

C# 使用多線程如何傳遞兩個以上參數的實作方法(附示例)

某些情況下當我們啟動一個線程的時候會向該線程傳遞參數,有時除了功能上需要之外,我覺得還有就是為了我們能管理好啟動的線程組(當然,隻開一兩個線程什麼的也談不上不好管理了,我說的線程組是指10+的線程,我們很難去主動控制的)。

因為剛接觸C#,是以還沒有在C#下用過多線程去實作某些功能。通過學習我發現單純的去啟動線程很容易,反而是想要往線程中傳一些參數變得有點說道了,這裡我想說傳入參數的數量為>=2。不過我們還是一步一步的來,帶大家過一遍C#下的多線程怎麼搞。

以上一篇講的的例子,把整個過程走一遍。這裡網絡通信隻是作為一個講解的示例,依舊是在控制台(Console)程式下實作的。

當Server端想要能與多個Client端進行連通的話,就必須用到多線程機制,我的思路:當程式啟動後,Server端自己開一個專門用于進行監聽的線程,這樣主程式如果想做其他事也就不耽誤了。當監聽線程檢測到有連接配接的請求,就為這個IP單獨建立一個新的Socket(我們暫時稱為SA Socket)進行通信用,當然,這個SA通信的内容(比如:收發消息)就是在一個新的線程或者兩個(我們暫時稱為TA線程)裡實作的了,這個時候就需要我們往TA線程裡傳入SA的專有ID,讓TA線程隻專門為SA服務。之後的就依次類推了。

下面建立一個監聽線程,這也是一個C#下最簡單的多線程使用——建立多線程

對,就是這麼easy,Thread構造函數裡的參數類型為ThreadStart,這個東西官方解釋是一個委托(啊,這裡就不講委托了,好像是C#特有的吧?反正我了解就是一個函數指針類型的東西或者是說某函數的别名,至于如何關聯方法與委托,就是用new 委托名(函數名)的方法),表示此線程開始執行時要調用的方法。

關于委托大家可以下載下傳這個PPT,第229頁處有詳細講解,簡單易懂。

如上所說,在監聽線程裡我會建立一個監聽的socket,然後有連接配接的話,會傳回一個新的Socket對象,看代碼:

接下來就是本篇的關鍵部分了,由于我已經建立好了一個用于通信的CommunicationSocket,是以現在需要去建立一個獨立的線程,用于專門為這個新的Socket作通信使用,而我傳入的參數就是CommunicationSocket這個對象以及這個對象在socket數組中的位置index。

既然new ThreadStart()隻能傳入一個方法名,而沒有給我們傳參數的地方,那麼針對于這個情況,我們需要用點小技巧,那就是使用類,看代碼:

這是我自己定義的消息操作類,大家看看,這個類的裡面即實作了利用socket發送消息,也實作了接收消息的方法。寫到這大家有沒有來點靈感呢?再繼續往下看:

這樣就實作了往線程裡傳遞1個以上的參數了。

這裡主要就是展示一下如何去傳多個參數,對于多線程的管理等細節上還是有很多漏洞的,是以大家挑幹的來就好了。

另外我附上原碼,跟文章中的有點出路,主要是在文章中我對一些變量名稱稍加進行了修改,便于大家看代碼。

最後要說的是在C#多線程中傳遞一個參數的時候,有另外的專門方法,記得也是跟委托有關,不過具體我隻是當時看了一下,這會兒已經記不得了,感興趣的朋友可以去搜一下,不過話說回來,既然都會傳多個參數了,傳一個參數的話應該也很好搞定的。

希望能幫到有需要的人。

本文出自 “” 部落格,請務必保留此出處