C#向線程中傳遞多個參數(shù)的解決方法(兩種)
問題:
對于多線程編程,很多時候往往需要向線程中傳遞多個參數(shù),而C#中的線程只接收1個object類型的參數(shù)(如下):
Thread t = new Thread(new ParameterizedThreadStart(newthread)); t.start(參數(shù)); void newthread(object) { ............. }
而現(xiàn)在需要往線程中傳遞多個參數(shù),比如method方法想用單獨的線程來跑
void method(int begin,int end) { .................. }
解決辦法1:新建一個跑方法的類
class myclass { private int begin; public int begin { set{this.begin=value;} } private int end; public int end { set{this.end=value;} } public run() { method(begin,end); } private method(int begin,int end) { ............... } }
然后新建一個該類實例,賦值之后就可以跑了,代碼如下;
myclass c = new myclass(); c.begin=100; c.end=10000; Thread t = new Thread(new Threadstart(c.run)) t.start();
2、解決方法2:將數(shù)組或集合實例作為參數(shù)傳入
目前正在做一個多線程的軟件,用到了這部分,感覺每次都要新建類,比較麻煩,查了網(wǎng)上主流都是解決方法1中的方法,后來自己琢磨出另一個方法,就是盡管新的線程只能傳1個參數(shù)進去,但是我們可以傳一個集合或者數(shù)組類的參數(shù)進去,這樣就可以解決一次向新線程中傳遞多個參數(shù)的問題了。
同樣,對于上面的method的方法,需要傳遞2個int類型的整數(shù),首先添加一個method方法的重載
void method(object o) { //此處對傳進來的參數(shù)進行處理 int[] p = (int[])o; //調(diào)用原來的method方法 method(p[0],p[1]); }
再將要傳遞的參數(shù)用數(shù)組或集合方式儲存起來
int para[]=new int[2]{100,10000};
最后新建線程進行調(diào)用
THread t = new Thread(new ParameterizedThreadStart(method)) t.start(para);
這樣就可以達到將2個參數(shù)傳遞入線程的目的了。
傳遞的參數(shù)類型也可以用List<>或其他集合,傳遞進去的這些參數(shù)的類型都是相同的,對于不同的類型,可以考慮采用List<object>或者object[] 的方式傳進去,在重載的方法中再對參數(shù)進行處理即可。
以上所述是小編給大家介紹的C#向線程中傳遞多個參數(shù)的解決方法(兩種) ,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
使用C#實現(xiàn)基于TCP和UDP協(xié)議的網(wǎng)絡(luò)通信程序的基本示例
這篇文章主要介紹了使用C#實現(xiàn)基于TCP和UDP協(xié)議的網(wǎng)絡(luò)通信程序的示例,文中分別編寫了基本的服務(wù)器端和客戶端,代碼十分簡單,需要的朋友可以參考下2016-04-04C# 對Outlook2010進行二次開發(fā)的圖文教程
下面小編就為大家分享一篇C# 對Outlook2010進行二次開發(fā)的圖文教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12ScriptControl控件執(zhí)行自定義VBS腳本示例分析
這篇文章主要介紹ScriptControl控件 msscript.ocx msscript.oca執(zhí)行自定義VBS腳本的示例代碼,需要的朋友可以參考下2013-04-04