最近在項目中須要用到多線程,考慮了一番,選擇了ThreadPool,個人需求是要拿到線程執行方法的返回值,多線程
可是ThreadPool.QueueUserWorkItem的回調方法默認是沒有返回值的,搜了搜,都是簡單介紹ThreadPool.QueueUserWorkItem的各類spa
用法,只能本身想辦法了。線程
回調方法不帶返回值,迂迴一下,回調方法用對象的方法,返回值放在對象的屬性中,在對象方法執行時將須要的返回值賦值給對應屬性。code
等全部線程執行完,循環對象列表,取回返回值,而後想怎麼處理返回值就OK了。上代碼: 對象
封裝對象:blog
1 using System; 2 using System.Threading; 3 public class ThreadReturnData 4 { 5 public ManualResetEvent manual; 6 public string res; 7 8 public void ReturnThreadData(object obj) 9 { 10 //線程耗時操做方法 11 res = DoSomething(obj); 12 manual.Set(); 13 } 14 }
多線程調用:string
1 List<ThreadReturnData> testList = new List<ThreadReturnData>(); 2 IList<ManualResetEvent> arrManual = new List<ManualResetEvent>(); 3 for (int i = 0; i < i; i++) 4 { 5 ThreadReturnData temp = new ThreadReturnData(); 6 temp.manual = new ManualResetEvent(false); 7 arrManual.Add(temp.manual); 8 ThreadPool.QueueUserWorkItem(new WaitCallback(temp.ReturnThreadData), i); 9 testList.Add(temp); 10 } 11 } 12 if (arrManual.Count > 0) 13 { 14 ////等待全部線程執行完 15 WaitHandle.WaitAll(arrManual.ToArray()); 16 } 17 foreach (ThreadReturnData d in testList) 18 { 19 d.res; 20 //todo 21 }