程序中,创建一个线程(暂时叫外线程),然后在那个线程里面在创建了三个线程(暂时叫子线程)我在每个子线程都有下载网页的任务,无论用httprequest还是webclient,网页有些是下载不了,便会出错,返回不了,这时候子线程会提示ThreadAbortException,然后子线程此会便会定下来不再终止,内存也始终占用着。然后我尝试在外线程外面主动Abort子线程,也同样抛出ThreadAbortException异常,也是线程不再自动终止,内存始终不释放。这个是bug还是我的思维错了,不应该用线程再创建线程去下载?我用的是VS.NET2005,下载应该是同步的。
{
try{开始下载}
catch{下载不了回收资源}
}
所以现在都是用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);
buffer = new byte[0x80000];不可以预知的情况下,怎么判断byte取多少?取少了也下载不完整。