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
关注我】。(●'◡'●)
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的【因为,我的写作热情也离不开您的肯定与支持,感谢您的阅读,我是【Jack_孟】!
本文来自博客园,作者:jack_Meng,转载请注明原文链接:https://www.cnblogs.com/mq0036/p/10431926.html
【免责声明】本文来自源于网络,如涉及版权或侵权问题,请及时联系我们,我们将第一时间删除或更改!