如题:本人想请教一下线程池的问题,如果我在
IList<EmailServer> list = EmailServerManager.GetAllEmailServer();
            foreach (EmailServer emailServer in list)
            {
上面这个Foreach循环里根据list.count,即如果list有多少条数据,就在线程池里配置多少个线程,不知该怎样做,望高手指教一下

解决方案 »

  1.   

    每次创建一个Thread就是了,当然c#本身提供一个System.Threading.ThreadPool,你也可以用
      

  2.   

    using System.Threading;IList<EmailServer> list = EmailServerManager.GetAllEmailServer();
      foreach (EmailServer emailServer in list)
      {
         //用ThreadPool可以用以下形式,排队任务,线程池空闲时自动执行;
          ThreadPool.QueueUserWorkItem(emailServer.sendMail);
         
         //或者用新线程Thread,有参数传入时,可以用ParameterizedThreadStart代替ThreadStart
         Thread  sendThreed = new Thread(new ThreadStart(emailServer.sendMail));
         sendThreed.IsBackground = true;    //后台运行
         sendThreed.Start();       }
      

  3.   

    5楼的基本看了一下,不是很明白
    我先说下我的功能
    IList<EmailServer> list = EmailServerManager.GetAllEmailServer();
      foreach (EmailServer emailServer in list)
      {
    EmailServer是邮件服务器表,里面保存的是邮箱的基本信息,我想根据list。count来调用线程池的线程,然后去执行同一个方法,收邮件
      

  4.   


    我想我说得已经比较明白了。根据上面的代码块再说几句
    foreach (EmailServer emailServer in list)
      {
      //用ThreadPool可以用以下形式,排队任务,线程池空闲时自动执行;
      ThreadPool.QueueUserWorkItem(这里是你收邮件的函数);
      //这种方法,只返回一个布尔值,是否注册成功。线程是线程池自动分配的,你无法跟踪线程的状态
        
      //或者用新线程Thread,有参数传入时,可以用ParameterizedThreadStart代替ThreadStart
      Thread getMailThread = new Thread(new ThreadStart(这里是你收邮件的函数));
      getMailThread.IsBackground = true; //后台运行
      getMailThread.Start();
      //这种方法,你自己创建线程getMailThread,若有要求可以跟踪、管理线程的状态,可以自己开一个线程数组来存储各线程。
      }不知道,楼主还有什么看不明白的地方?