zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    JavaScript 与 Java 是两种完全不同的语言,无论在概念还是设计上。
    JavaScript 是脚本语言
    java String去除两端的空格和空字符
    response.sendRedirect 的功能是地址重定向(页面跳转)
    Java中“|”和“||”用法的区别
    如何居中div?
    DIV居中的几种方法
    table 中的tr 行点击 变换颜色背景
    Html-浅谈如何正确给table加边框
    背景图以拉伸方式(不重复)填充背景
  • 原文地址:https://www.cnblogs.com/mq0036/p/10431926.html
Copyright © 2011-2022 走看看