在for 循环中通过ThreadPool.QueueUserWorkItem创建几个线程去处理任务
问题是:
在循环NEXT每次执行时,本次创建的线程是否已全部结束,如果不是,如何手动结束
Thanks guys我是业余编程爱好者,问的不专业还请谅解线程池
问题是:
在循环NEXT每次执行时,本次创建的线程是否已全部结束,如果不是,如何手动结束
Thanks guys我是业余编程爱好者,问的不专业还请谅解线程池
解决方案 »
- 将VF的DBF文件导入到sql的问题,请高手指点咯!!
- C#中怎么通过子窗体向父窗体中用代码生成的控件中传值
- [求助][急]由于以前的函数求值超时,函数求值被禁用。必须继续执行才能重新启用函数求值
- Microsoft Visual Studio 2005中的动态帮助问题
- 求解:winform下,
- 用代码打开wav声音文件
- tabcontrol控件中的tabPage顺序问题!?
- 需要csdn登录时用到的校验码程序
- 有做验证码识别的吗? 进来帮个忙,谢谢了
- 高分求教思路:如何做一个像打印预览时所用的整个界面??
- 问大侠看看这样的编码结构数据库怎么设计呢?打算用C#的TREEVIEW来调用
- 关于socket异步通信
比如说i从0到5
我用threadPool 调一个函数download(),其实download()结束我是有标志的,(我的理解是,download结束,线程也就结束了)然后在FOR 循环的末尾我会判断是否每个线程的download()结束标志都是TRUE,然后才NEXT,
但这样发现有时候,i=2 时, download()中的某些局部变量的值仍保持着i=1时的值
不知为何
{
ThreadPool.QueueUserWorkItem(h=>
{
call(i);
});
}
这显然就是乱的。因为它们共享了i,会造成重复。你需要修改为for(var i=0;i<5,i++)
{
var j=i;
ThreadPool.QueueUserWorkItem(h=>
{
call(j);
});
}
非常感谢,说的很明白
for(var x=0,x<5,x++)
{for(var i=0;i<5,i++)
{
var j=i;
ThreadPool.QueueUserWorkItem(h=>
{
call(j);
});
}
}
这样应该也没有问题吧