2011年11月22日 星期二

實作http斷點與多執行緒下載

如題
開發語言:C#

類別下載:https://sites.google.com/site/ahijup/downloadspeed/mHttpwebClient.txt


實作步驟:
1.取得檔案的大小
2.切割適當的大小
3.根據指定的執行緒數目
4.開啟多執行緒下載
5.等待每個區塊下載完成
6.假設完成的大小不足於檔案大小
7.回到4.
8.直到檔案下載完成


以下是重要程式片段:


.
.
.
//第一個參數是下載網址與存檔位置,第二個是多少個執行緒同步下載
HttpWebClient wc = new HttpWebClient(pu, 1) ;
//新增webclient的datareceieve事件
wc.OnDataReceieve += new HttpWebClient.DataReceieveEventHandler(wc_OnDataReceieve);
//新增一個背景執行緒
System.Threading.Thread _t = new System.Threading.Thread(new System.Threading.ThreadStart(wc.Start));
//開啟執行緒
_t.Start();
.
.
.
//當收到事件的時候要處理的動作

        void wc_OnDataReceieve(HttpWebClient obj, HttpWebClient.HttpClientEventArgs e)
        {
            //Console.WriteLine("Happening-> " + e.e.ToString());


            switch (e.e)
            {
                case HttpWebClient.HttpClientEvents.ChunkDataRec:
                    break;
                case HttpWebClient.HttpClientEvents.ChunkDownloadCompleted:
                    break;
                case HttpWebClient.HttpClientEvents.ChunkRetry:
                    break;
                case HttpWebClient.HttpClientEvents.ChunkError:
                    break;
                case HttpWebClient.HttpClientEvents.ChunkRetryFull:
                    break;
                case HttpWebClient.HttpClientEvents.FileRecComplete:
                    gf_OnDwonloadComplete(null);
                    break;
                case HttpWebClient.HttpClientEvents.FailConnectToServer:
                    break;
                case HttpWebClient.HttpClientEvents.DownloadProgressChanged:
                    break;
                default:
                    break;
            }
            //throw new NotImplementedException();
        }


.
.
.




基本上還沒實作地很完善,如有更新再放上來跟大家分享..
更新紀錄: [v1.0] 從網路以多執行緒的方式下載資料

沒有留言: