2013-03-08 96 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);