C#更新程序設計

更新程序設計

        大體設想了兩種更新方式,以下所示:html

 

一種簡單暴力,直接請求靜態資源服務器上的文件服務器

 

第二種考慮了網絡傳輸不穩定時,中斷的狀況。再次啓動更新時會檢測本地文件下載多少了,而後接着上次中斷的位置繼續下載。網絡

 

 

 

更新過程

        更新過程就如同平時你們使用軟件更新的過程同樣,客戶端程序啓動,檢測到更新,啓動更新程序,客戶端關閉,更新程序下載更新包,下載完成後進行解壓,覆蓋本地客戶端文件,更新程序啓動客戶端,客戶端啓動,更新程序關閉。異步

 

代碼

 

主要使用WebClient類及HttpWebRequest類spa

 

    WebClient類

     1.WebClient.DownloadFileCompleted事件:異步文件下載操做完成時發生。.net

    備註:設計

            每次異步文件下載操做完成後,將引起此事件。經過調用啓動的異步文件下載 DownloadFileAsync 方法code

            AsyncCompletedEventHandler是此事件的委託。htm

            AsyncCompletedEventArgs類爲事件處理程序提供事件數據blog

 

    示例:

  1.  
        WebClient client = new WebClient();
  2.  
        Uri uri = new Uri(address);
  3.  
        client.DownloadFileCompleted += new AsyncCompletedEventHandler(Func1);
  4.  
        client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(Func2);
  5.  
        client.DownloadFileAsync(uri, "E:\\source\\Update.zip");

 

    2.WebClient.DownloadProgressChanged事件:在異步下載操做成功轉換部分或所有數據時發生。

    備註:

            每當異步下載取得進展時,就會引起此事件。

            DownloadProgressChangedEventHandler是此事件的委託

            DownloadProgressChangedEventArgs類爲事件處理程序提供事件數據

            使用如下方法之一啓動下載時,引起此事件:

                DownloadDataAsync    從資源下載數據並返回Byte[]數據

                DownloadFileAsync      將數據從資源下載到本地文件

                OpenReadAsync           從資源返回數據

 

    3.DownloadProgressChanged事件:使用DownloadProgressChangedEventArgs類  實例化爲e

                e.TotalBytesToReceive    從WebClient數據下載操做獲取的字節總數

                e.BytesReceived              獲取一次接收的字節數

                e.ProgressPercentage     獲取異步任務進度百分比

                e.UserState                      獲取惟一的用戶狀態

 

    HttpWebRequest類

       主要鏈接下載使用代碼以下:
 
  1.  
    //打開網絡鏈接
  2.  
    string StrUrl = "http://xxx.xxx.x.xxx:xxxx//..."; //資源文件地址
  3.  
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(StrUrl) //爲指定的URL方案初始化新的WebRequest實例
  4.  
    request.AddRange(( int)StartPos); //向請求添加(從請求數據的開始處或結束處的特定範圍的)字節範圍標頭
  5.  
    //向服務器請求,得到服務器迴應數據流
  6.  
    Stream ns = request.GetResponse().GetResponseStream(); //返回來自Internet資源的響應;從Internet資源返回數據流
  7.  
    int nReadSize = 0;
  8.  
    byte[] nbytes = new byte[ 512];
  9.  
    nReadSize = ns.Read(nbytes, 0, 512);
  10.  
    while(nReadSize > 0)
  11.  
    {
  12.  
        fs.Write(nbyte, 0, nReadSize); //寫入本地文件流中
  13.  
        nReadSize = ns.Read(nbytes, 0, 512);
  14.  
    }
  15.  
    ns.Close();
  16.  
    request.About();
  17.  
     

抱歉剛剛沒寫完就傳上來了,尷尬被同事拉回家了。。。。。。

 

出處:https://blog.csdn.net/Yl12fh/article/details/81033295

相關文章
相關標籤/搜索