2013-03-08 138 views
0

我使用此代码从一个URL下载文件。HttpWebResponse多个文件下载

Stream stm = myHttpResponse.GetResponseStream(); 
byte[] buff = new byte[4096]; 
Stream fs = new FileStream("c:\\file1.txt", FileMode.Append , FileAccess.Write); 
int r = 0; 

while((r = stm.Read(buff, 0, buff.Length)) > 0) 
{ 
    fs.Write(buff, 0, r); 
} 

如果我想下载20个文件(来自不同的URL),同时有可能用不到20个线程办呢?

编辑

HttpWebResponse还没有异步方法。我希望有一些使用BeginRead/BeginWrite的例子。我认为他们不占用线程池线程

+0

难道你参考:http://stackoverflow.com/questions/15276158/infinite-loop-while-downloading-multiple-files-with-webclient/15276809#15276809?问题和Eric的建议都会帮助你选择正确的方式。 – 2013-03-08 08:53:14

回答

0

不,不可能有20个同时使用下载流少于20个线程。您可以使用ThreadPool.QueueUserWorkItem并限制线程的数量,但这不是同时的IMO。 无论如何,您最好使用WebClient类及其DownloadFileAsync方法。

WebClient client = new WebClient(); 
client.Credentials = new NetworkCredential("username", "password"); 
client.DownloadFileAsync(uriString,fileName);