更新程序设计

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

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

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

更新过程

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

代码

主要使用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

C#更新程序设计的更多相关文章

  1. ROS机器人程序设计(原书第2版)补充资料 (零) 源代码、资料和印刷错误修订等 2017年01月01日更新

    ROS机器人程序设计(原书第2版)补充资料 (零) 源代码等 ROS官网 版)部分内容修订 页:第1行,删去$ 页:第6行,float64 y 前面加一个空格 页:中间创建主题:下面程序不用换行,(& ...

  2. PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中……)

    PTA|团体程序设计天梯赛-练习题目题解锦集(持续更新中) 实现语言:C/C++:      欢迎各位看官交流讨论.指导题解错误:或者分享更快的方法!! 题目链接:https://pintia.cn/ ...

  3. Windows下EDK2环境的搭建以及经典的程序设计Print Hello World !-----(Linux下的待后续熟练了再更新)

    很久没有更新博客了,之前的博客末尾有提到过要写有关EDK2环境搭建的博客,现在就是完成的时候了,后续博客更新会比较规律(大概每周一篇?) 本人博客仅仅发表于博客园,本人主页为         http ...

  4. “盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛题解&&源码【A,水,B,水,C,水,D,快速幂,E,优先队列,F,暴力,G,贪心+排序,H,STL乱搞,I,尼姆博弈,J,差分dp,K,二分+排序,L,矩阵快速幂,M,线段树区间更新+Lazy思想,N,超级快速幂+扩展欧里几德,O,BFS】

    黑白图像直方图 发布时间: 2017年7月9日 18:30   最后更新: 2017年7月10日 21:08   时间限制: 1000ms   内存限制: 128M 描述 在一个矩形的灰度图像上,每个 ...

  5. OSG程序设计之更新回调

    更新回调(Update Callback)涉及到一个类:osg::NodeCallback.这个类重载了函数调用操作符.当回调动作发生时,将会执行这一操作符的内容. 如果节点绑定了更新回调函数,那么在 ...

  6. (更新中)"华为杯" 武汉大学21级新生程序设计竞赛 非官方题解

    "华为杯" 武汉大学21级新生程序设计竞赛 https://ac.nowcoder.com/acm/contest/31620#question D.和谐之树 思路:披着线段树外皮 ...

  7. hihoCoder #1586 : Minimum-结构体版线段树(单点更新+区间最值求区间两数最小乘积) (ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛)

    #1586 : Minimum Time Limit:1000ms Case Time Limit:1000ms Memory Limit:256MB Description You are give ...

  8. HTML5 程序设计 - 使用HTML5 Canvas API

    请你跟着本篇示例代码实现每个示例,30分钟后,你会高喊:“HTML5 Canvas?!在哥面前,那都不是事儿!” 呵呵.不要被滚动条吓到,很多都是代码和图片.我没有分开写,不过上面给大家提供了目录,方 ...

  9. 解析大型.NET ERP系统 单据标准(新增,修改,删除,复制,打印)功能程序设计

    ERP系统的单据具备标准的功能,这里的单据可翻译为Bill,Document,Entry,具备相似的工具条操作界面.通过设计可复用的基类,子类只需要继承基类窗体即可完成单据功能的程序设计.先看标准的销 ...

随机推荐

  1. MPX

    Pre-processing: MPX使用的滤波器是自适应性的‘Wiener’ filter.有时甚至不用MPX,因为尽管Wiener 所引起的扰乱是可以忽略的,有时发现滤波并不能很好地提高拾取的精度 ...

  2. codeforce150A(简单的求质数问题)

    A. Win or Freeze time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  3. Unity项目中的资源管理

    这是我在2017金山技术开放日分享的部分内容.从贴图资源格式配置的介绍开始,引申出资源配置工具,最后再谈谈一整套项目资源管理方案.在GitHub上可以获取到资源配置工具的代码,是基于下面理念的一份简单 ...

  4. synchronized(一)

    /** * 线程安全概念:当多个线程访问某一个类(对象或方法)时,这个对象始终都能表现出正确的行为,那么这个类(对象或方法)就是线程安全的. * synchronized:可以在任意对象及方法上加锁, ...

  5. day 67 django 之ORM 增删改查基础

    一 操作基础前提准备 1. 新建django 项目 mysite  子项目app01 ,选择好做路径. 2  .2-1在app01 下面models 中引用 模块 from  django.db im ...

  6. svn+http+ad域

    svn本地添加用户太麻烦了,如果公司有一百个开发人员要访问,要创建账号密码太麻烦了:所以让他们用AD域账号去登录就很方便,但是权限的管控还是在svn的本地添加(这个暂时还没办法很好的解决) 一.安装依 ...

  7. DRF-Rest_Framework 学习文档

    序列化器(serializer) 定义Serializer 1. 定义方法 Django REST framework中的Serializer使用类来定义,须继承自rest_framework.ser ...

  8. QueryString中的加号变成空格解决方法

    通过Request.QueryString["CheckItem"]的方式调用值的时候,数值中的加号“+”会转换为空格“ ” 例如传输“ABC+EFG”,就会取到“ABC EFG” ...

  9. asp.net 后台执行js

    1. 用Response.Write方法 代码如下: Response.Write("<script type='text/javascript'>alert("XXX ...

  10. C# process 隐藏应用程序的进度条

    命令行参数那加上-ibck指定后台运行. string sourceFilepath = "d:\\测试.rar"; string targetFilepath = "d ...