在for 循环中通过ThreadPool.QueueUserWorkItem创建几个线程去处理任务
问题是:
在循环NEXT每次执行时,本次创建的线程是否已全部结束,如果不是,如何手动结束
Thanks guys我是业余编程爱好者,问的不专业还请谅解线程池

解决方案 »

  1.   

    ThreadPool取不到里面线程的状态。你要想取只能用Thread或用BackgroundWork可以得到当前工作线程的状态
      

  2.   


    比如说i从0到5
    我用threadPool 调一个函数download(),其实download()结束我是有标志的,(我的理解是,download结束,线程也就结束了)然后在FOR 循环的末尾我会判断是否每个线程的download()结束标志都是TRUE,然后才NEXT,
    但这样发现有时候,i=2 时, download()中的某些局部变量的值仍保持着i=1时的值
    不知为何
      

  3.   

    这是多线程编程时一个最容易犯的错误。这说明你的两个线程中的过程共享了相同的变量。通常在编程设计时,你应该为每一个线程复制此变量值得副本,然后传给程序执行。例如for(var i=0;i<5,i++)
    {
       ThreadPool.QueueUserWorkItem(h=>
       {
            call(i);
       });
    }    
    这显然就是乱的。因为它们共享了i,会造成重复。你需要修改为for(var i=0;i<5,i++)
    {
       var j=i;   
       ThreadPool.QueueUserWorkItem(h=>
       {
            call(j);
       });
    }
      

  4.   

    因为它们共享了i,会造成重复。  -->  因为它们共享了i,会造成冲突。
      

  5.   


    非常感谢,说的很明白
    for(var x=0,x<5,x++)
    {for(var i=0;i<5,i++)
    {
       var j=i;   
       ThreadPool.QueueUserWorkItem(h=>
       {
            call(j);
       });
    }
    }
    这样应该也没有问题吧