• C#更新程序设计


    更新程序设计

            大致设想了两种更新方式,如下所示:

    一种简单暴力,直接请求静态资源服务器上的文件

    第二种考虑了网络传输不稳定时,中断的情况。再次启动更新时会检测本地文件下载多少了,然后接着上次中断的位置继续下载。

    更新过程

            更新过程就如同平时大家使用软件更新的过程一样,客户端程序启动,检测到更新,启动更新程序,客户端关闭,更新程序下载更新包,下载完成后进行解压,覆盖本地客户端文件,更新程序启动客户端,客户端启动,更新程序关闭。

    代码

    主要使用WebClient类及HttpWebRequest类

        WebClient类

         1.WebClient.DownloadFileCompleted事件:异步文件下载操作完成时发生。

        备注:

                每次异步文件下载操作完成后,将引发此事件。通过调用启动的异步文件下载 DownloadFileAsync 方法

                AsyncCompletedEventHandler是此事件的委托。

                AsyncCompletedEventArgs类为事件处理程序提供事件数据

        示例:

    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

  • 相关阅读:
    PHPStrom 转 VSCode 折腾记录(配置分享)
    Ubuntu 17.10/18.04使用内置指纹识别(联想T440内置Synaptics Validity Sensors)
    How to Enable Fingerprint Login In Ubuntu 19.10, 19.04
    RESTful API 中的 Status code 是否要遵守规范
    RESTful API定义及使用规范
    Google protocol buff使用
    linux shell 值coredump suid_dumpable和 gdb解析coredump文件
    linux shell 之流程控制 if if else while
    error while loading shared libraries: libXXXX.so: cannot open shared object file: No such file or directory
    Excel表格写入操作函数 C++
  • 原文地址:https://www.cnblogs.com/mq0036/p/10431926.html
Copyright © 2020-2023  润新知