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 ...
随机推荐
- cocos2d-x 用浏览器打开网页
转自:http://www.xuebuyuan.com/1396292.html,http://www.cocoachina.com/bbs/read.php?tid=88589 First!! 源代 ...
- TL-WR703 USB不稳定/当前的总结
http://see.sl088.com/wiki/WR703_USB%E4%B8%8D%E7%A8%B3%E5%AE%9A/%E5%BD%93%E5%89%8D%E7%9A%84%E6%80%BB% ...
- Codeforces Gym 100015G Guessing Game 差分约束
Guessing Game 题目连接: http://codeforces.com/gym/100015/attachments Description Jaehyun has two lists o ...
- C# 仿制QQ弹出新闻消息框
打开QQ的时候,QQ新闻弹出窗体在屏幕的右下角就会慢慢升起一个小窗口,占用的地方不大,可以起到提示的作用.下面就让我们来看看,怎样用系统API来轻松实现这个功能. API原型函数: bool Anim ...
- 【JavaScript】关于prototype
所有的对象都有constructor属性 但是只有function类型才有prototype属性----->值是一个对象,即prototype对象,所有的实例对象共享同一个prototype对象 ...
- ios实例开发精品源码文章推荐
iOS源码:游戏引擎-推箱子游戏 http://www.apkbus.com/android-106392-1-11.html iOS源码:进度条-Colorful ProgressView http ...
- jquery easyui from 表单返回乱码!
如果用easyui的form进行提交,必须在<form>标签中加入属性method="post",即<form method="post"&g ...
- 【安卓特效】怎样给ImageView加上遮罩,点击时泛黑、或泛白、?
基本思路: 方法1.遮罩可直接叠加一层带alpha的纯白.或纯黑View,可直接在ImageView外套一层FrameLayout,其foreground(一般同学可能仅仅知道background,事 ...
- THD 变量存入threads中
http://blog.csdn.net/gapaul/article/details/12047497 http://ourmysql.com/archives/930
- Linux用户空间与内核空间(理解高端内存)
Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数 ...