作者KENyroj (難得一身雞蛋糕...)
看板C_Sharp
標題[問題]請教物件容器轉型...
時間Wed Dec 26 10:52:27 2007
各位好...
最近使用了 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