C#更新程序设计
更新程序设计
大致设想了两种更新方式,如下所示:
一种简单暴力,直接请求静态资源服务器上的文件
第二种考虑了网络传输不稳定时,中断的情况。再次启动更新时会检测本地文件下载多少了,然后接着上次中断的位置继续下载。
更新过程
更新过程就如同平时大家使用软件更新的过程一样,客户端程序启动,检测到更新,启动更新程序,客户端关闭,更新程序下载更新包,下载完成后进行解压,覆盖本地客户端文件,更新程序启动客户端,客户端启动,更新程序关闭。
代码
主要使用WebClient类及HttpWebRequest类
WebClient类
1.WebClient.DownloadFileCompleted事件:异步文件下载操作完成时发生。
备注:
每次异步文件下载操作完成后,将引发此事件。通过调用启动的异步文件下载 DownloadFileAsync 方法
AsyncCompletedEventHandler是此事件的委托。
AsyncCompletedEventArgs类为事件处理程序提供事件数据
示例:
- WebClient client = new WebClient();
- Uri uri = new Uri(address);
- client.DownloadFileCompleted += new AsyncCompletedEventHandler(Func1);
- client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(Func2);
- 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类
- //打开网络连接
- string StrUrl = "http://xxx.xxx.x.xxx:xxxx//...";//资源文件地址
- HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(StrUrl)//为指定的URL方案初始化新的WebRequest实例
- request.AddRange((int)StartPos);//向请求添加(从请求数据的开始处或结束处的特定范围的)字节范围标头
- //向服务器请求,获得服务器回应数据流
- Stream ns = request.GetResponse().GetResponseStream();//返回来自Internet资源的响应;从Internet资源返回数据流
- int nReadSize = 0;
- byte[] nbytes = new byte[512];
- nReadSize = ns.Read(nbytes,0,512);
- while(nReadSize > 0)
- {
- fs.Write(nbyte, 0, nReadSize);//写入本地文件流中
- nReadSize = ns.Read(nbytes, 0, 512);
- }
- ns.Close();
- request.About();
抱歉刚刚没写完就传上来了,被同事拉回家了。。。。。。
出处:https://blog.csdn.net/Yl12fh/article/details/81033295
C#更新程序设计的更多相关文章
- ROS机器人程序设计(原书第2版)补充资料 (零) 源代码、资料和印刷错误修订等 2017年01月01日更新
ROS机器人程序设计(原书第2版)补充资料 (零) 源代码等 ROS官网 版)部分内容修订 页:第1行,删去$ 页:第6行,float64 y 前面加一个空格 页:中间创建主题:下面程序不用换行,(& ...
- PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中……)
PTA|团体程序设计天梯赛-练习题目题解锦集(持续更新中) 实现语言:C/C++: 欢迎各位看官交流讨论.指导题解错误:或者分享更快的方法!! 题目链接:https://pintia.cn/ ...
- Windows下EDK2环境的搭建以及经典的程序设计Print Hello World !-----(Linux下的待后续熟练了再更新)
很久没有更新博客了,之前的博客末尾有提到过要写有关EDK2环境搭建的博客,现在就是完成的时候了,后续博客更新会比较规律(大概每周一篇?) 本人博客仅仅发表于博客园,本人主页为 http ...
- “盛大游戏杯”第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 描述 在一个矩形的灰度图像上,每个 ...
- OSG程序设计之更新回调
更新回调(Update Callback)涉及到一个类:osg::NodeCallback.这个类重载了函数调用操作符.当回调动作发生时,将会执行这一操作符的内容. 如果节点绑定了更新回调函数,那么在 ...
- (更新中)"华为杯" 武汉大学21级新生程序设计竞赛 非官方题解
"华为杯" 武汉大学21级新生程序设计竞赛 https://ac.nowcoder.com/acm/contest/31620#question D.和谐之树 思路:披着线段树外皮 ...
- hihoCoder #1586 : Minimum-结构体版线段树(单点更新+区间最值求区间两数最小乘积) (ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛)
#1586 : Minimum Time Limit:1000ms Case Time Limit:1000ms Memory Limit:256MB Description You are give ...
- HTML5 程序设计 - 使用HTML5 Canvas API
请你跟着本篇示例代码实现每个示例,30分钟后,你会高喊:“HTML5 Canvas?!在哥面前,那都不是事儿!” 呵呵.不要被滚动条吓到,很多都是代码和图片.我没有分开写,不过上面给大家提供了目录,方 ...
- 解析大型.NET ERP系统 单据标准(新增,修改,删除,复制,打印)功能程序设计
ERP系统的单据具备标准的功能,这里的单据可翻译为Bill,Document,Entry,具备相似的工具条操作界面.通过设计可复用的基类,子类只需要继承基类窗体即可完成单据功能的程序设计.先看标准的销 ...
随机推荐
- jdk8-全新时间和日期api
1.jdk8日期和时间api是线程安全的 1.java.time 处理日期时间 2.java.time.temporal: 时间校正器.获取每个月第一天,周几等等 3.java.time.forma ...
- 20165214 预备作业3 Linux安装及学习
一.VirtualBox和Ubuntu的安装 点进VirtualBox的官网后,不知道为什么,我只看到了5.2.6版本...又看到同学反映说5.2.7版本会出现问题,我想可能是工作人员正在补5.2.7 ...
- dos命令:网络相关命令
网络相关命令 一.Arp命令 1.介绍 显示和修改地址解析协议(ARP)使用的“IP 到物理”地址转换表. 2.语法 ARP -s inet_addr eth_addr [if_addr] ARP ...
- IDEA PYCHARM USAGE NOTE
初次安装使用PyCharm,在新建.py文件时会发现文件头并没有什么信息,因此,使用模板会比较方便. 方法如下: 1.打开PyCharm,选择File--Settings 2.依次选择Editor-- ...
- dynamic programming:find max subarray
public static mark dynway( ) //put or pop the books into the basket,mark the highest recorder { int ...
- KB/MB/GB。。单位换算
今天遇到一个需求,需要把数据单位进行换算,记录一下.写的不好请勿见怪. function bytesToSize( bytes ) {//单位转化 var k = 1024, ...
- SQL注入之Sqli-labs系列第十五关和第十六关(基于POST的时间盲注)
开始挑战第十五关(Blind- Boolian Based- String)和 第十六关(Blind- Time Based- Double quotes- String) 访问地址,输入报错语句 ' ...
- python 实现 KNN 分类器——手写识别
1 算法概述 1.1 优劣 优点:进度高,对异常值不敏感,无数据输入假定 缺点:计算复杂度高,空间复杂度高 应用:主要用于文本分类,相似推荐 适用数据范围:数值型和标称型 1.2 算法伪代码 (1)计 ...
- 【leetcode】283. Move Zeroes
problem 283. Move Zeroes solution 先把非零元素移到数组前面,其余补零即可. class Solution { public: void moveZeroes(vect ...
- ss linux终端配置
最近ss莫名宕机,懒得重新安装了,就安装了一个非gui版本,安装非gui版本还有一个优点就是在远程服务器的时候可以用proxychains进行终端代理,非常友好实用.下面简单的说一下如何进行终端ss ...