看板 C_Sharp 關於我們 聯絡資訊
各位好... 最近使用了 ThreadPool... 有一個實作我一直搞不定... ~"~ 我有一個工作要做很多次, 彼此沒有關係... 我要用 ThreadPool 來做... 這個 ThreadPool 是在 CodeProject 找來的... 可以等全部工作結束才著進行.. object DoSomething(object Param) {....} ... SmartThreadPool STP = new SmartThreadPool(); // 以下我加入了兩個工作到 SmartThreadPool裡... 並取得兩個執行結果... IWorkItemResult wr1 = STP.QueueWorkItem(new WorkItemCallback(DoSomething),1); IWorkItemResult wr2 = STP.QueueWorkItem(new WorkItemCallback(DoSomething),2); // 用 WaitAll 的 static method 來等全部的執行結束, 傳入 IWorkItemResult 的陣列 IWorkItemResult[] Results = new IWorkItemResult[] {wr1, wr2}; SmartThreadPool.WaitAll(Results); 上面是 SmartThreadPool 的範例程式... 我會需要一個 IWorkItemResult 的陣列... 但是今天我的工作數量不一定... 所以我希望寫成這樣... SmartThreadPool STP = new SmartThreadPool(); List<IWorkItemResult> ResultList = new List<IWorkItemResult>(); foreach(int param in Params) { IWorkItemResult wr = STP.QueueWorkItem(new WorkItemCallback(DoSomething), param); ResultList.Add(wr); } SmartThreadPool.WaitAll(ResultList.ToArray()); 我宣告了一個 IWorkItemResult 的容器, 把每次執行的結果都丟進去... 然後最後再把整個容器丟給 WaitAll... 看起來是很理想... 但是卻有一個問題... IWorkItemResult 並沒有提供建構式, 所以不能 new List<IWorkItemResult>() 所以我又把程式改寫了這種鳥方法... SmartThreadPool STP = new SmartThreadPool(); List<object> ResultList = new List<object>(); // 用 object 來裝先 foreach(同上) { IWorkItemResult wr = 同上; ResultList.Add(wr); // 這一行也一樣 } IWorkItemResult[] WR = new IWorkItemResult[ResultList.Count]; for(int i = 0; i < ResultList.Count; i++) WR[i] = (IWorkItemResult)ResultList[i]; SmartThreadPool.WaitAll(WR); 在這我改用 object 的容器來裝結果... 然後再轉型並填入 IWorkItemResult 陣列... 我只是覺得我黃色這部份寫得有點笨... 不知有沒有更快更方便的寫法.. ?? 畢竟我會用到 ThreadPool 的地方還蠻多的, 我希望不要一直出現這種東西... 講這麼多... 其實我要的就只是物件容器轉型啦... ^^" 謝謝大家看完... ^^" __yroj -- KOKIA - ありがとう もしも もう いちど 假使再一次  あなた に あえる なら 遇見你的話  たった ひとこと 只有一句話  つたえたい 想告訴你 http://home.so-net.net.tw/kenyroj/share/arigatou.swf -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.248.5.97 ※ 編輯: KENyroj 來自: 60.248.5.97 (12/26 10:53) ※ 編輯: KENyroj 來自: 60.248.5.97 (12/26 11:10)
liunate:我記得<List>有.ToArray直接轉指定型別?(有點忘記) 12/26 14:19
huge:IWorkItemResult有任何implement嗎? 12/26 15:27
huge:沒有的話就寫一個function做轉型的動作如何? (我也想不到@@) 12/26 15:27
KENyroj:我目前是寫 Function 轉型沒錯啦 XD 12/26 17:10