CS异步下载
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Net;
using System.Text;
using System.Windows.Forms; namespace 下载示例
{
public delegate void form1ContentControl(bool isFinish); public partial class Form2 : Form
{
public Form2(string _sourceFile,string _destFile)
{
InitializeComponent();
sourceFile = _sourceFile;
destFile = _destFile;
} public string sourceFile;
public string destFile; public event form1ContentControl contentControl; private void Form2_Load(object sender, EventArgs e)
{
label1.Text = String.Format("[{0}]下载中...",Path.GetFileName(sourceFile));
fileDownloading();
} private void button1_Click(object sender, EventArgs e)
{
if (button1.Text == "取消")
{
this.Close();
}
else
{
contentControl(true);
this.Close();
}
} private void fileDownloading()
{
try
{
WebClient client = new WebClient();
//进行异变下载
client.DownloadFileAsync(new Uri(sourceFile), destFile);
//绑定进度改变时的事件
client.DownloadProgressChanged += client_DownloadProgressChanged;
//绑定完成时事件
client.DownloadFileCompleted += client_DownloadFileCompleted;
}
catch (WebException we)
{
MessageBox.Show(we.Message);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
} /// <summary>
/// 事件:WEBCIENT下载进度改变时触发的回调事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
Action<DownloadProgressChangedEventArgs> onCompleted = progressChanging;
onCompleted.Invoke(e);
} /// <summary>
/// 事件:WEBCLIENT下载完成时的回调事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
Action<AsyncCompletedEventArgs> onCompleted = progressCompleted;
onCompleted.Invoke(e);
} /// <summary>
/// 文件下载进度改变时触发
/// </summary>
/// <param name="de"></param>
private void progressChanging(DownloadProgressChangedEventArgs de)
{
progressBar1.Value = de.ProgressPercentage;
linkLabel1.Text = String.Format("{0}%",de.ProgressPercentage);
linkLabel2.Text = String.Format("{0}M/{1}M",Math.Round((double)de.BytesReceived/1024/1024,2),Math.Round((double)de.TotalBytesToReceive/1024/1024,2));
} /// <summary>
/// 当文件下载完成时触发
/// </summary>
/// <param name="de"></param>
private void progressCompleted(AsyncCompletedEventArgs de)
{
label1.Text = String.Format("[{0}]下载已经完成!", Path.GetFileName(sourceFile));
button1.Text = "完成";
}
}
}
CS异步下载的更多相关文章
- 一个简单的利用 WebClient 异步下载的示例(二)
继上一篇 一个简单的利用 WebClient 异步下载的示例(一) 后,我想把核心的处理提取出来,成 SkyWebClient,如下: 1. SkyWebClient 该构造函数中 downloadC ...
- Android多线程分析之五:使用AsyncTask异步下载图像
Android多线程分析之五:使用AsyncTask异步下载图像 罗朝辉 (http://www.cnblogs.com/kesalin) CC 许可,转载请注明出处 在本系列文章的第一篇<An ...
- Android多线程分析之一:使用Thread异步下载图像
Android多线程分析之一:使用Thread异步下载图像 罗朝辉 (http://www.cnblogs.com/kesalin) CC 许可,转载请注明出处 打算整理一下对 Android F ...
- WebClient.DownloadFile(线程机制,异步下载文件)
线程机制(避免卡屏),异步下载文件. 我做网站的监控,WebClient.DownloadFile这个方法是我经常用到的,必要的时候肯定是要从网上下载些什么(WebRequest 也可以下载网络文件, ...
- iOS异步下载下载进度条显示
说到http异步下载,首先要知道其中的关键类. 关键类是NSURLConnection NSURLRequest NSMutableURLRequest 委托是 NSURLConnectionDo ...
- unity下载文件三(http异步下载)
异步下载,顾名思义就是不影响你主线程使用客户端的时候,人家在后台搞你的明堂. 直接入主题,既然要下载,首先得请求,请求成功之后进行回调,这就是一个异步过程,异步回调的时间不可控. 1.首先请求下载. ...
- Android 中的异步下载
网上提到最多的就是利用AsyncTask进行异步下载,用android-async-http第三方库的也比较多.这里写点注意事项. 先说说android-async-http,这个库发送请求利用thr ...
- FtpWebRequest FTP异步下载、异步上传文件
异步下载: public interface IPrimaryKey<T> { T GetKey(); } public class DownloadInfo : IPrimaryKey& ...
- Android异步下载图片并且缓存图片到本地
Android异步下载图片并且缓存图片到本地 在Android开发中我们经常有这样的需求,从服务器上下载xml或者JSON类型的数据,其中包括一些图片资源,本demo模拟了这个需求,从网络上加载XML ...
随机推荐
- nslookup 查询IPv6
> nslookup> set type=AAAA > ipv6 domain name (ipv6.google.com, time.buptnet.edu.cn)
- 【M31】让函数根据一个以上的对象类型来决定如何虚化
1.考虑下面的问题,游戏软件中有角色A,B,角色又可以细化为A1,A2,A3:B1,B2,B3,两类角色之间相互攻击.即A1可以攻击B1,B2,B3,B1可以攻击A1,A2,A3.C++的多态,只根据 ...
- Navicat 导入数据报错 --- 1153 - Got a packet bigger than 'max_allowed_packet' bytes
在用Navicat导入SQL文件时报错:MySql 错误 Err [Imp] 1153 - Got a packet bigger than 'max_allowed_packet' bytes 查了 ...
- //判断是否安装Flash插件
//判断是否安装Flash插件 var swf; function IE_Flash() { try { var swf ...
- JAVA正则表达式语法大全
[正则表达式]文本框输入内容控制 整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$ 只能输入数字:"^[0-9]*$". 只能输入n位的数字:"^\d{n ...
- box-flex等分总结
首先要知道在应用 box-flex 时必须给父容器定义 css 属性 display:box 其子容器才可以进行划分. .box{ display: -webkit-box; display: -mo ...
- javascript complete, onload
1.complete 属性可返回浏览器是否已完成对图像的加载 <html> <head> <script type="text/javascript" ...
- Control.Refresh Control.Invalidate 和 Control.OnPaint之间的联系和区别
1.Control.Invalidate会放一个WM_PAINT消息到消息队列,当Control处理到该消息的时候,就调用OnPaint. 2.Control.Refresh相当于以下两行:Contr ...
- dispatch_group_async可以实现监听一组任务是否完成,完成后得到通知执行其他的操作。这个方法很有用,比如你执行三个下载任务,当三个任务都下载完成后你才通知界面说完成的了
dispatch_queue_t queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ); dispatch_group_ ...
- 《算法导论》习题解答 Chapter 22.1-6(求universal sink 通用汇点)
思路:设置两个游标i指向行,j指向列,如果arr[i][j]==1,则i=max{i+1,j},j++:如果arr[i][j]==0,则j=max{i+1,j+1}. 伪代码: has_univers ...