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异步下载的更多相关文章

  1. 一个简单的利用 WebClient 异步下载的示例(二)

    继上一篇 一个简单的利用 WebClient 异步下载的示例(一) 后,我想把核心的处理提取出来,成 SkyWebClient,如下: 1. SkyWebClient 该构造函数中 downloadC ...

  2. Android多线程分析之五:使用AsyncTask异步下载图像

    Android多线程分析之五:使用AsyncTask异步下载图像 罗朝辉 (http://www.cnblogs.com/kesalin) CC 许可,转载请注明出处 在本系列文章的第一篇<An ...

  3. Android多线程分析之一:使用Thread异步下载图像

    Android多线程分析之一:使用Thread异步下载图像 罗朝辉 (http://www.cnblogs.com/kesalin) CC 许可,转载请注明出处   打算整理一下对 Android F ...

  4. WebClient.DownloadFile(线程机制,异步下载文件)

    线程机制(避免卡屏),异步下载文件. 我做网站的监控,WebClient.DownloadFile这个方法是我经常用到的,必要的时候肯定是要从网上下载些什么(WebRequest 也可以下载网络文件, ...

  5. iOS异步下载下载进度条显示

    说到http异步下载,首先要知道其中的关键类. 关键类是NSURLConnection  NSURLRequest NSMutableURLRequest  委托是 NSURLConnectionDo ...

  6. unity下载文件三(http异步下载)

    异步下载,顾名思义就是不影响你主线程使用客户端的时候,人家在后台搞你的明堂. 直接入主题,既然要下载,首先得请求,请求成功之后进行回调,这就是一个异步过程,异步回调的时间不可控. 1.首先请求下载. ...

  7. Android 中的异步下载

    网上提到最多的就是利用AsyncTask进行异步下载,用android-async-http第三方库的也比较多.这里写点注意事项. 先说说android-async-http,这个库发送请求利用thr ...

  8. FtpWebRequest FTP异步下载、异步上传文件

    异步下载: public interface IPrimaryKey<T> { T GetKey(); } public class DownloadInfo : IPrimaryKey& ...

  9. Android异步下载图片并且缓存图片到本地

    Android异步下载图片并且缓存图片到本地 在Android开发中我们经常有这样的需求,从服务器上下载xml或者JSON类型的数据,其中包括一些图片资源,本demo模拟了这个需求,从网络上加载XML ...

随机推荐

  1. hdu 2821 Pusher (dfs)

    把这个写出来是不是就意味着把   http://www.hacker.org/push  这个游戏打爆了? ~啊哈哈哈 其实只要找到一个就可以退出了  所以效率也不算很低的  可以直接DFS呀呀呀呀 ...

  2. How can I terminate a thread that has a seperate message loop?

    http://www.techques.com/question/1-10415481/How-can-I-terminate-a-thread-that-has-a-seperate-message ...

  3. C++学习笔记之作用域为类的常量和作用域内的枚举

    一.作用域为类的常量 有些情况下,使符号常量的作用域为类很有用.如,类声明(不是定义)可能使用字面值30来指定数组长度,由于该常量对于所有对象来说都是相同的,因此创建一个由所有对象共享的常量是个不错的 ...

  4. Educational Codeforces Round 4 B. HDD is Outdated Technology 暴力

    B. HDD is Outdated Technology 题目连接: http://www.codeforces.com/contest/612/problem/B Description HDD ...

  5. Nmap 源代码学习四 软件简单使用

    软件安装环境是win7.使用Zenmap, nmap6.49BETA2 扫描主机port nmap -T4 -A -v 192.168.0.207 输出结果: 扫描整个子网 nmap 192.168. ...

  6. &quot;undefined reference to&quot; 问题解决方法

    近期在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似以下这种错误: (.text+0x13): undefined reference to `func' 关于undef ...

  7. NULL, '\0',0 '0'的区别

    如题,在程序中经常遇到NULL,和'\0',常常疑惑它们是什么关系,其实它们的值是一样的,只不过表现的形式不一样: 1.NULL; NULL 即空指针,在C和C++中的形式不一样,msdn上有如下的内 ...

  8. Preventing CSRF in Java web apps---reference

    reference from:http://ricardozuasti.com/2012/preventing-csrf-in-java-web-apps/ Cross-site request fo ...

  9. git的.gitignore配置

    .gitignore 配置文件用于配置不需要加入版本管理的文件,配置好该文件可以为我们的版本管理带来很大的便利,以下是个人对于配置 .gitignore 的一些心得. 1.配置语法: 以斜杠“/”开头 ...

  10. BootStrap2学习日记22---点击展开

    先看效果: Code: <div class="accordion" id="accordion2"> <div class="ac ...