我那個單執行緒用的是異步下載
部分代碼:
public void DownloadFile(string urlAddress, string location)
{
using (webClient = new WebClient())
{
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
try
{
Uri URL;
URL = new Uri(urlAddress);
sw.Start();
// 開始異步下載
webClient.DownloadFileAsync(URL, location);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
怎么進行多執行緒下載呢
uj5u.com熱心網友回復:
多執行緒并不是一個很高級的技術,不必動則“多執行緒”既然你
// 開始異步下載
webClient.DownloadFileAsync(URL, location);
這么寫了。那么非要多執行緒才高級么??
for(i to 100)
{
DownloadFile(string urlAddress, string location) //難道不行???
}
uj5u.com熱心網友回復:
異步就是多執行緒的一種實作啊,你是想把檔案切成幾塊同時下載嗎?那你研究一下什么是斷點續傳,然后new幾個Thread去執行就行了。uj5u.com熱心網友回復:
https://mp.weixin.qq.com/s/MLMjJ7hW-Apr2JHyJ9CgZQ 多任務+多執行緒+斷點續傳的下載示例代碼。原理是通過Range這個RequestHeader向服務器請求指定片段的資料。
uj5u.com熱心網友回復:
你是要一個檔案,多個執行緒下載,還是多個檔案,多個執行緒下載?uj5u.com熱心網友回復:
wnloadFile(string urlAddress, string location){
using (webClient = new WebClient())
{
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
try
{
Uri URL;
URL = new Uri(urlAddress);
sw.Start();
// 開始異步下載
webClient.DownloadFileAsync(URL, location);
uj5u.com熱心網友回復:
跟帖 學習一下uj5u.com熱心網友回復:
封裝成物體類 然后回圈調方法uj5u.com熱心網友回復:
一個檔案,多執行緒下載,有什么辦法嗎
uj5u.com熱心網友回復:

附程式圖片
uj5u.com熱心網友回復:
首先,要服務器支持分塊下載,你才可能用多個下載執行緒來加速。一般你可以先用HEAD方法發一個Http請求,看服務器是否支持。假設服務器回傳:
...
Accept-Ranges: bytes
Content-Length: 146515
...
說明該下載檔案長度為146515個位元組,而且服務器支持按位元組(bytes)的分塊。
這時,你就可以用多個執行緒來下載,每個執行緒請求不同的的分塊,最后,把所有分塊組裝起來就完成了下載。比如
請求一可以是:
GET 832-windows.exe HTTP/1.1
Range: bytes=0-1023
..
請求二可以是:
GET 832-windows.exe HTTP/1.1
Range: bytes=1024-2047
..
等等
具體你還可以參考4樓X-i-n朋友提供的鏈接。
uj5u.com熱心網友回復:
學會不用資料庫,不用UI寫代碼。起碼能做到這樣才能算出師執行緒安全list<下載封裝>
static slim下載控制信號量(5) //資源有限,正常情況,你也看到,大多數人會控制并行下載數量,通常并行數是5
class 下載封裝 :InotifityProperychanged
{
object 下載進度
列舉狀態:等待,下載中,下載完成
task 開始下載
}
具體代碼我們也懶得寫,邏輯實作難度不大,至于UI顯示,有串列你可以系結,有InotifityProperychanged 可以通知你有進度更新,有開始下載方法可以讓你開始下載(當然什么暫停,繼續這類我就不說啥了,照貓畫虎而已)
uj5u.com熱心網友回復:
需要取到檔案總大小,然后根據接收到的位元組來判斷下載進度
uj5u.com熱心網友回復:
把進度條放入表單,根據實際進度或虛擬進度,模擬進度條0到100%效果。轉載請註明出處,本文鏈接:https://www.uj5u.com/net/14580.html
標籤:C#
上一篇:自動累加病假天數
