如果线程池中没有可用线程,就新创建一个线程。BackGroundWorker应该用了线程池线程(不是显式地new一个Thread)。
但的确是在后台线程的基础上加一些相关操作。

解决方案 »

  1.   

    .net 线程是用WINAPI管理的,LZ知道结论就行,不要纠结实现过程。 
      

  2.   

    线程池是有最大最小容量的,可以用这两个方法查到:
                int threads;
                int ioTHreads;
                ThreadPool.GetMinThreads(out threads, out ioTHreads);
                ThreadPool.GetMaxThreads(out threads, out ioTHreads);
    一开始线程池是空的。因为最大值是三千多,一次过都创建出来就太浪费了,而且在绝大多数的情况之下不需要。如果在允许范围之内,没有线程,或者没有空闲线程。则会创建一个新的线程。
    用完之后它不会销毁,直接回到线程池但是,如果达到或者超过允许范围,后面来的 task 都要排队,线程池不会再创建新线程
      

  3.   

    1.楼主可以看一些操作系统的知识~了解一下为什么要有线程~
    我是看《操作系统之哲学原理》2.然后在看《clr via c》这本书~
    好吧,开始回答楼主的问题~
    你把线程想象成酒店的服务员~当一个土豪带一群朋友来吃饭,
    一个服务员应付不过来,那酒店就再派一个去服务她们~ 
    还应付不过来那就再派一个他们....有了这样的想象后,再来类比~
    当计算机的任务很多的时候~ 可以创建线程(虚拟CPU)但线程的创建是很昂贵的~(招服务员)
    所以就需要酒店经理(线程池)来管理服务员(线程)【最大可能重复利用,安排空闲地去工作,而不是不停地招】而你.NET开发者~作为酒店的CEO,只要告诉酒店经理有个土豪要来酒店~要他好好安排一下服务员的问题~
      

  4.   

    是创建一个,还是有可能创建多个(比如CRL觉得这个任务一个线程不够)?
      

  5.   

    是创建一个,还是有可能创建多个(比如CRL觉得这个任务一个线程不够)?两种情况都有~取决于线程池的算法~你可以看《clr via c》 作者是微软的技术顾问~有参与.net平台的设计工作~
    里面有关线程的内容写得很详细~
      

  6.   

    是创建一个,还是有可能创建多个(比如CRL觉得这个任务一个线程不够)?两种情况都有~取决于线程池的算法~你可以看《clr via c》 作者是微软的技术顾问~有参与.net平台的设计工作~
    里面有关线程的内容写得很详细~
    截图就是这本书里的...
      

  7.   

    是创建一个,还是有可能创建多个(比如CRL觉得这个任务一个线程不够)?两种情况都有~取决于线程池的算法~你可以看《clr via c》 作者是微软的技术顾问~有参与.net平台的设计工作~
    里面有关线程的内容写得很详细~
    就是因为这本书的这句话不够详细,所以让我很疑惑,到底是绝对只创建一个,还是可能创建N个。
      

  8.   

    是创建一个,还是有可能创建多个(比如CRL觉得这个任务一个线程不够)?两种情况都有~取决于线程池的算法~你可以看《clr via c》 作者是微软的技术顾问~有参与.net平台的设计工作~
    里面有关线程的内容写得很详细~
    就是因为这本书的这句话不够详细,所以让我很疑惑,到底是绝对只创建一个,还是可能创建N个。如果只是可以创建一个线程,那还要线程池干什么~