线程池内传递多个参数的问题

bpmfwu 2008-11-18 10:54:30
我有一个DataView,每1行有5列,我现在想把每列的数值作为参数传递给方法 StartPingMonitor, 请问如何实现?


System.Data.DataView dvMonitor = MyDB.GetDataView("Ping_FG_IPTVIPMonitor"); // DataView 赋值

for (int i = 0;i <dvMonitor.cout ; i++)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(StartPingMonitor), dvMonitor); // 这里该如何写?
}


...全文
276 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dreamsnake 2008-11-19
  • 打赏
  • 举报
回复
我都是传键值对,然后到线程里再强制转换的。
当然,用数组也可以,只是感觉键值对取值的时候比较直观。呵呵
bpmfwu 2008-11-19
  • 打赏
  • 举报
回复
还有其他方法么?
gomoku 2008-11-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 bpmfwu 的回复:]
直接传入DATAVIEW是肯定不行的,一来浪费资源,二来你必须设置一个静态参数来控制行数,线程间不安全。
[/Quote]
Good point :)

object[] state = new object[]{
dvMonitor[i]["ip"],
dvMonitor[i]["asdf"],
dvMonitor[i]["qwer"],
dvMonitor[i]["zxcv"],
dvMonitor[i]["...."]
};
ThreadPool.QueueUserWorkItem(new WaitCallback(StartPingMonitor), state);
jy251 2008-11-18
  • 打赏
  • 举报
回复
.net 2.0 的特性啊····参数可以传递给线程。.net1.1可是没有。

没办法,机器落后,我还在使用.net1.1,我的方法:
定义线程池,不使用类库所给的线程池,自己定义线程数组,thread[]。
定义变量数组Var[],变量数组个数与thrad数量一致。
接下来不就好办了吗??

对于同一个i来说,thread[i]不就对应Var[i]了吗??传参数我看是没有必要了吧。如果怕线程不安全,那么定义互斥

private static Mutex mut = new Mutex();
mut.WaitOne();
//数据操作 &×……)×%……¥
mut.ReleaseMutex();
bpmfwu 2008-11-18
  • 打赏
  • 举报
回复
直接传入DATAVIEW是肯定不行的,一来浪费资源,二来你必须设置一个静态参数来控制行数,线程间不安全。
lee118 2008-11-18
  • 打赏
  • 举报
回复
直接传入DATAVIEW

void StartPingMonitor(object state)
{
DataView dv = state as DataView;
//...
}

bpmfwu 2008-11-18
  • 打赏
  • 举报
回复
楼上的不对歪,只能传递一个参数["ip"],我一行有5个参数需要传递的。
gomoku 2008-11-18
  • 打赏
  • 举报
回复

{
System.Data.DataView dvMonitor = MyDB.GetDataView("Ping_FG_IPTVIPMonitor");

for (int i = 0; i < dvMonitor.cout; i++)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(StartPingMonitor), dvMonitor[i]["ip"]);
}
}

void StartPingMonitor(object state)
{
string ip = state as string;
//...
}
周公 2008-11-18
  • 打赏
  • 举报
回复
System.Data.DataView dvMonitor = MyDB.GetDataView("Ping_FG_IPTVIPMonitor"); // DataView 赋值                   

ArrayList parameters=new ArrayList();//用集合来保存参数信息,因为集合可以当作一个object来看待
for (int i = 0;i <dvMonitor.cout ; i++)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(StartPingMonitor), parameters); //传递参数集合信息
}
bpmfwu 2008-11-18
  • 打赏
  • 举报
回复
定自己,期待解决

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧