HttpWebResponse对象调用Close方法时阻塞了, 怎么办?

talkinsmile 2006-06-10 04:18:14
一个用于下载的方法:
public long Download(string uri, int buffersize, string filename, string fileencode)
{
string encode = "";
byte[] buf = new byte[buffersize];
int len = 0;
long size = 0;
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri);
req.AllowAutoRedirect = true;
using(HttpWebResponse res = (HttpWebResponse)req.GetResponse())
{
using(Stream sReader = res.GetResponseStream())
{
using(FileStream sWriter = new FileStream(filename, FileMode.Create))
{
while((len = sReader.Read(buf, 0, buffersize)) > 0)
{
sWriter.Write(buf, 0, buf.Length);
size = sWriter.Position;
if(size > 512 * 1024)//如果文件尺寸大于512K,则关闭流.
{
sWriter.Close();
sReader.Close();//此处阻塞, 查看任务管理器, 发现下载依旧在进行. 何解?
break;
}
}
}
}
}
buf = null;
req = null;
return size;
}

请知道的大侠指点一二?
...全文
87 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
talkinsmile 2006-06-10
  • 打赏
  • 举报
回复
哈哈, 自己找到解决办法了:
public long Download(string uri, int buffersize, string filename, string fileencode)
{
string encode = "";
byte[] buf = new byte[buffersize];
int len = 0;
long size = 0;
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri);
req.AllowAutoRedirect = true;
using(HttpWebResponse res = (HttpWebResponse)req.GetResponse())
{
using(Stream sReader = res.GetResponseStream())
{
using(FileStream sWriter = new FileStream(filename, FileMode.Create))
{
while((len = sReader.Read(buf, 0, buffersize)) > 0)
{
sWriter.Write(buf, 0, buf.Length);
size = sWriter.Position;
if(size > 512 * 1024)//如果文件尺寸大于512K,则关闭流.
{
req.Abort();//需要首先调用放弃方法.
break;
}
}
}
}
}
buf = null;
req = null;
return size;
}

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧