程序中,创建一个线程(暂时叫外线程),然后在那个线程里面在创建了三个线程(暂时叫子线程)我在每个子线程都有下载网页的任务,无论用httprequest还是webclient,网页有些是下载不了,便会出错,返回不了,这时候子线程会提示ThreadAbortException,然后子线程此会便会定下来不再终止,内存也始终占用着。然后我尝试在外线程外面主动Abort子线程,也同样抛出ThreadAbortException异常,也是线程不再自动终止,内存始终不释放。这个是bug还是我的思维错了,不应该用线程再创建线程去下载?我用的是VS.NET2005,下载应该是同步的。

解决方案 »

  1.   

    while(下载开始)
    {
       try{开始下载}
       catch{下载不了回收资源}
    }
      

  2.   

    不行啊英雄!问题是我try-catch抛出webclient异常的同时诱发ThreadAbortException,这在外线程直接调用是不会发生只有是子线程里面,一下载页面失败就诱发线程终止,但是却又终止异常会不会是我用monitor类有关?
      

  3.   

    我用HttpWebRequest根本就下不全网页
    所以现在都是用TcpClient
    this.Uri = uri.ToString();
    byte[] buffer;
    Encoding encoder = Encoding.GetEncoding(CharSet);
    //建立HTTP头
    string header = string.Format("GET {0} HTTP/1.1\r\nHost: {1}\r\n\r\n",
    uri.PathAndQuery,
    uri.Host);
    //写入缓冲区
    buffer = ASCIIEncoding.ASCII.GetBytes(header);
    //建立TCP连接
    TcpClient client = new TcpClient();
    client.Connect(uri.Host, uri.Port);
    NetworkStream ns = client.GetStream();
    //发送HTTP头
    ns.Write(buffer, 0, header.Length); //建立接受缓冲区(512KB)
    buffer = new byte[0x80000];
    //计数变量
    int count;
    //本次接受到的字节数
    count = ns.Read(buffer, 0, buffer.Length);
    Content = Encoding.GetEncoding(CharSet).GetString(buffer,0,count);
      

  4.   

    楼上的,//建立接受缓冲区(512KB)
    buffer = new byte[0x80000];不可以预知的情况下,怎么判断byte取多少?取少了也下载不完整。