作者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)
1F:推 liunate:我记得<List>有.ToArray直接转指定型别?(有点忘记) 12/26 14:19
2F:推 huge:IWorkItemResult有任何implement吗? 12/26 15:27
3F:→ huge:没有的话就写一个function做转型的动作如何? (我也想不到@@) 12/26 15:27
4F:→ KENyroj:我目前是写 Function 转型没错啦 XD 12/26 17:10