有两个问题(注释里有提到), 
1. 是否这样使用多线程??
2. req.GetResponse();//执行到这里时说ThreadPool 对象中没有足够的自由线程来完成操作??请大家帮帮忙class AA{
const int MAX_THREADS = 200;
private Thread[] myThreads = new Thread[MAX_THREADS];void aa(){
for (int i=0; i<MAX_THREADS; i++)
{
  myThreads[i] = new Thread(new ThreadStart(this.run));
  myThreads[i].Name = i.ToString();
  myThreads[i].Start();//是否这样使用多线程??
}
}private void run()
{
  bool bRunning = true;
  while (bRunning)
  {
    try
    {
WebProxy proxyObj = new WebProxy(adRef[curCount--].strProxy,true);//curCount是全局变量.
WebRequest req = WebRequest.Create(strUri);
WebResponse resp = req.GetResponse();//执行到这里时说ThreadPool 对象中没有足够的自由线程来完成操作??
resp.Close();
    }
    catch(){...}  if (curCount<0) bRunning = false;
  }
}
}

解决方案 »

  1.   

    补充一下:
    比如有400个任务(也就是curCount=400), 用200个线程来执行,出现"没有足够线程完成操作"好像是第201次执行时出现,但如果将
    WebResponse resp = req.GetResponse();
    resp.Close();
    这两句注释掉就没出错,为什么呢??
    第一次接触多线程,不懂啊,请大家帮帮忙吧
      

  2.   

    产生错误的原因应该是httpwebrequest类的getresponse方法使用了异步方法来获得返回值,
    而默认的threadpool显然不能提供这么多的可用线程,因为每一个getresponse执行过程都会锁定资源,可能会造成死锁而导致线程无法返回也是原因之一.