C#向線程中傳遞多個(gè)參數(shù)的解決方法(兩種)
問(wèn)題:
對(duì)于多線程編程,很多時(shí)候往往需要向線程中傳遞多個(gè)參數(shù),而C#中的線程只接收1個(gè)object類(lèi)型的參數(shù)(如下):
Thread t = new Thread(new ParameterizedThreadStart(newthread)); t.start(參數(shù)); void newthread(object) { ............. }
而現(xiàn)在需要往線程中傳遞多個(gè)參數(shù),比如method方法想用單獨(dú)的線程來(lái)跑
void method(int begin,int end) { .................. }
解決辦法1:新建一個(gè)跑方法的類(lèi)
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) { ............... } }
然后新建一個(gè)該類(lèi)實(shí)例,賦值之后就可以跑了,代碼如下;
myclass c = new myclass(); c.begin=100; c.end=10000; Thread t = new Thread(new Threadstart(c.run)) t.start();
2、解決方法2:將數(shù)組或集合實(shí)例作為參數(shù)傳入
目前正在做一個(gè)多線程的軟件,用到了這部分,感覺(jué)每次都要新建類(lèi),比較麻煩,查了網(wǎng)上主流都是解決方法1中的方法,后來(lái)自己琢磨出另一個(gè)方法,就是盡管新的線程只能傳1個(gè)參數(shù)進(jìn)去,但是我們可以傳一個(gè)集合或者數(shù)組類(lèi)的參數(shù)進(jìn)去,這樣就可以解決一次向新線程中傳遞多個(gè)參數(shù)的問(wèn)題了。
同樣,對(duì)于上面的method的方法,需要傳遞2個(gè)int類(lèi)型的整數(shù),首先添加一個(gè)method方法的重載
void method(object o) { //此處對(duì)傳進(jìn)來(lái)的參數(shù)進(jìn)行處理 int[] p = (int[])o; //調(diào)用原來(lái)的method方法 method(p[0],p[1]); }
再將要傳遞的參數(shù)用數(shù)組或集合方式儲(chǔ)存起來(lái)
int para[]=new int[2]{100,10000};
最后新建線程進(jìn)行調(diào)用
THread t = new Thread(new ParameterizedThreadStart(method)) t.start(para);
這樣就可以達(dá)到將2個(gè)參數(shù)傳遞入線程的目的了。
傳遞的參數(shù)類(lèi)型也可以用List<>或其他集合,傳遞進(jìn)去的這些參數(shù)的類(lèi)型都是相同的,對(duì)于不同的類(lèi)型,可以考慮采用List<object>或者object[] 的方式傳進(jìn)去,在重載的方法中再對(duì)參數(shù)進(jìn)行處理即可。
以上所述是小編給大家介紹的C#向線程中傳遞多個(gè)參數(shù)的解決方法(兩種) ,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- 淺談C#跨線程調(diào)用窗體控件(比如TextBox)引發(fā)的線程安全問(wèn)題
- C#實(shí)現(xiàn)線程安全的簡(jiǎn)易日志記錄方法
- c#使用多線程的幾種方式示例詳解
- C#實(shí)現(xiàn)終止正在執(zhí)行的線程
- c# winform多線程的小例子
- C#創(chuàng)建線程帶參數(shù)的方法
- C#實(shí)現(xiàn)多線程寫(xiě)入同一個(gè)文件的方法
- c# winform 關(guān)閉窗體時(shí)同時(shí)結(jié)束線程實(shí)現(xiàn)思路
- C#線程 BeginInvoke和EndInvoke使用方法
- C#隊(duì)列Queue多線程用法實(shí)例
- c# 線程安全隊(duì)列的用法原理及使用示例
相關(guān)文章
C# 泛型集合的自定義類(lèi)型排序的實(shí)現(xiàn)
這篇文章主要介紹了C# 泛型集合的自定義類(lèi)型排序的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11C#實(shí)現(xiàn)簡(jiǎn)易點(diǎn)餐功能
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)簡(jiǎn)易點(diǎn)餐功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07使用C#實(shí)現(xiàn)基于TCP和UDP協(xié)議的網(wǎng)絡(luò)通信程序的基本示例
這篇文章主要介紹了使用C#實(shí)現(xiàn)基于TCP和UDP協(xié)議的網(wǎng)絡(luò)通信程序的示例,文中分別編寫(xiě)了基本的服務(wù)器端和客戶端,代碼十分簡(jiǎn)單,需要的朋友可以參考下2016-04-04C# 對(duì)Outlook2010進(jìn)行二次開(kāi)發(fā)的圖文教程
下面小編就為大家分享一篇C# 對(duì)Outlook2010進(jìn)行二次開(kāi)發(fā)的圖文教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12在C#里面給PPT文檔添加注釋的實(shí)現(xiàn)代碼
平常開(kāi)會(huì)或者做總結(jié)報(bào)告的時(shí)候我們通常都會(huì)用到PowerPoint演示文稿,我們可以在單個(gè)幻燈片或者全部幻燈片里面添加注釋?zhuān)@樣觀眾可以從注釋內(nèi)容里面獲取更多的相關(guān)信息,需要的朋友可以參考下2017-01-01C#中哈希表(Hashtable)的介紹及簡(jiǎn)單用法
在.NET Framework中,Hashtable是System.Collections命名空間提供的一個(gè)容器,用于處理和表現(xiàn)類(lèi)似key/value的鍵值對(duì)2013-03-03ScriptControl控件執(zhí)行自定義VBS腳本示例分析
這篇文章主要介紹ScriptControl控件 msscript.ocx msscript.oca執(zhí)行自定義VBS腳本的示例代碼,需要的朋友可以參考下2013-04-04