博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#更新程序设计
阅读量:5291 次
发布时间:2019-06-14

本文共 1942 字,大约阅读时间需要 6 分钟。

更新程序设计

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

 

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

 

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

 

 

 

更新过程

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

 

代码

 

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

转载于:https://www.cnblogs.com/mq0036/p/10431926.html

你可能感兴趣的文章
对比传统的Xilinx AMP方案和OPENAMP方案-xapp1078和ug1186
查看>>
面试题2
查看>>
selenium+java iframe定位
查看>>
P2P综述
查看>>
细读 php json数据和JavaScript json数据
查看>>
第五章 如何使用Burp Target
查看>>
Sprint阶段测试评分总结
查看>>
Servlet3.0新特性
查看>>
java内存溢出怎么解决
查看>>
JS对象以及"继承"
查看>>
Ewebeditor最新漏洞及漏洞大全
查看>>
socket计划编制的原则
查看>>
sqlite3经常使用命令&语法
查看>>
[leetcode] 309. Best Time to Buy and Sell Stock with Cooldown(medium)
查看>>
解决微信授权回调页面域名只能设置一个的问题 [php]
查看>>
HDU 4671 Backup Plan 构造
查看>>
linux下编译openjdk8
查看>>
【python】--迭代器生成器装饰器
查看>>
Pow(x, n)
查看>>
安卓当中的线程和每秒刷一次
查看>>