C# 下载带进度条代码(普通进度条)

<span style="font-size:14px;">     </span><pre name="code" class="csharp"><span style="font-size:14px;">        /// <summary>
        /// 下载带进度条代码(普通进度条)
        /// </summary>
        /// <param name="URL">网址</param>
        /// <param name="Filename">下载后文件名为</param>
        /// <param name="Prog">报告进度的处理(第一个参数:总大小,第二个参数:当前进度)</param>
        /// <returns>True/False是否下载成功</returns>
        public static bool DownLoadFile(string URL, string Filename, Action<int, int> updateProgress = null)
        {
            Stream st = null;
            Stream so = null;
             System.Net.HttpWebRequest Myrq =null;
             System.Net.HttpWebResponse myrp = null;
            bool flag = false;
            try
            {
                Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(URL); //从URL地址得到一个WEB请求
                myrp = (System.Net.HttpWebResponse)Myrq.GetResponse(); //从WEB请求得到WEB响应
                long totalBytes = myrp.ContentLength; //从WEB响应得到总字节数
                //更新进度
                if (updateProgress != null)
                {
                    updateProgress((int)totalBytes,0);//从总字节数得到进度条的最大值
                }
                st = myrp.GetResponseStream(); //从WEB请求创建流(读)
                so = new System.IO.FileStream(Filename, System.IO.FileMode.Create); //创建文件流(写)
                long totalDownloadedByte = 0; //下载文件大小
                byte[] by = new byte[1024];
                int osize = st.Read(by, 0, (int)by.Length); //读流
                while (osize > 0)
                {
                    totalDownloadedByte = osize + totalDownloadedByte; //更新文件大小
                    Application.DoEvents();
                    so.Write(by, 0, osize); //写流
                    //更新进度
                    if (updateProgress != null)
                    {
                        updateProgress((int)totalBytes, (int)totalDownloadedByte);//更新进度条
                    }
                    osize = st.Read(by, 0, (int)by.Length); //读流
                }
                //更新进度
                if (updateProgress != null)
                {
                    updateProgress((int)totalBytes, (int)totalBytes);
                }
                flag= true;
            }
            catch(Exception )
            {
                flag = false;
                throw;
                //return false;
            }
            finally
            {
                if (Myrq != null)
                {
                    Myrq.Abort();//销毁关闭连接
                }
                if (myrp != null)
                {
                    myrp.Close();//销毁关闭响应
                }
                if (so != null)
                {
                    so.Close(); //关闭流
                }
                if (st != null)
                {
                    st.Close(); //关闭流
                }
            }
            return flag;
        }</span>


调用方式一:

<span style="font-size:14px;"> if (FileUpDownload.DownLoadFile("下载文件的网址", "文件名", new Action<int, int>(
        (int Maximum, int Value)
        =>
        {
            //更新进度条
            progressBar1.Maximum = Maximum;
            progressBar1.Value = Value;
        })
))
{
	//下载文件后的处理

}</span>

不传参数的action写法:

((Form)form).BeginInvoke(new Action(() =>
            {
                //处理
            })

调用方式二:

<span style="font-size:14px;"> </span><pre name="code" class="csharp"><span style="font-size:14px;"> if (FileUpDownload.DownLoadFile("下载文件的网址", "文件名", UpdateProgressBar))
 {
	//下载文件后的处理

}
////更新进度条
private void UpdateProgressBar(int Maximum, int Value)
{
     progressBar1.Maximum = Maximum;
     progressBar1.Value = Value;
}</span>

小注:调用代码中的progressBar1是微软的进度条控件

URL示例:http://111.111.111.211/TestService/download/V1.00/1.00_0012.zip

如果要充Windows Server上下载文件的话,需要在iis中配置,该目录为可以访问的,具体配置步骤如下:

1、找到需要下载文件对应的目录:

2、在右侧找到《目录浏览》:

3、在《目录浏览》上右键,点击:打开该功能

4、可以看到下图,启用即可:

时间: 2024-11-08 18:51:04

C# 下载带进度条代码(普通进度条)的相关文章

js文章下载进度条代码

提示:您可以先修改部分代码再运行 js文章下载进度条代码 提示:您可以先修改部分代码再运行

PHP+apc+ajax实现的ajax_upload上传进度条代码_php技巧

本文实例讲述了PHP+apc+ajax实现的ajax_upload上传进度条代码.分享给大家供大家参考,具体如下: 上传进度条是怎么实现的呢?原理是怎么样的呢?当我们浏览,选择上传后,会产生一个临时文件,上传的时把这个临时文件,上传到服务器,上传完成后,这个临时文件会被删除掉.如果我们能读取这个临时文件的大小,就知道上传进度是多少了,php apc模块可以实现这个功能. 一.安装apc模块 下载地址:http://pecl.php.net/package/apc tar zxvf APC-3.1

js网页加载进度条代码

js网页加载进度条代码 <script LANGUAGE="JAVASCRIPT"> var timerID=null;     <!--延时变量--> var count=0;          <!--表示进度的循环变量--> var running=false;    <!--是否正在进行格式化的标志量--> function RandomNumber(max)        <!--用来产生随机数的函数--> {var

Swift 制作一个带动画效果的环形进度条例子

1,带动画效果的环形进度条 下面我们演示如何制作一个环状进度条组件,当进度改变时,进度条长度变化时是有动画效果的(我们还可以设置动画时间,或者关闭动画),效果图如下: (1)动画实现原理 使用 Core Animation 动画根据进度改变进度条(CAShapeLayer)的 strokeEnd. (2)组件代码(OProgressView.swift) import UIKit   @IBDesignable class OProgressView: UIView {          str

线程-C#进度条能否根据代码的执行进度来加载进度?

问题描述 C#进度条能否根据代码的执行进度来加载进度? 我在网上搜索了下资料,大部分都是使用Timer控件或者线程来进行,但是最终都是根据计算结果来写出一个MaxValue和一个Value来计算并且填充进度条 但是计算的话总感觉不是很准确,我如今遇到了一个比较棘手的难关(对于我而言),有个界面的树在读取数据库进行绑定的时候会显得非常慢,但是设定进度条的时间长短根本无法确定,以及代码例如(链接TCP之类的)断开链接也会产生卡主的状况,但是由于线程的关系,进度条依然显示完毕了. 使得我非常的头疼,因

Android中FTP上传、下载的功能实现(含进度)_Android

 Android中使用的FTP上传.下载,含有进度. 代码部分主要分为三个文件:MainActivity,FTP,ProgressInputStream 1. MainActivity package com.ftp; import java.io.File; import java.io.IOException; import java.util.LinkedList; import com.ftp.FTP.DeleteFileProgressListener; import com.ftp.

Android自定义水平进度条的圆角进度_Android

平时项目中经常用到自定义进度条样式,我们一般实现的也是下面的第一种,至于第二种的圆角进度,网上介绍的资料也不是很多,这里一起展示一下这两种的实现. 下面开始看代码,先从主界面布局开始看起: <ProgressBar style="@android:style/Widget.ProgressBar.Horizontal" android:layout_width="match_parent" android:layout_height="20dp&qu

Android ProgressBar进度条和ProgressDialog进度框的展示DEMO_php技巧

在做手机开发时,经常碰到一些比较耗时的操作,这个时候进度条就开始派上用场了.这个demo展示了ProgressBar进度条和ProgressDialog进度框.一.ProgressDialog进度框,效果如图所示:代码如下: 复制代码 代码如下: //进度对话框按钮监听     class ProssButtonListener implements OnClickListener {         @Override         public void onClick(View v) {

Android自定义水平进度条的圆角进度

平时项目中经常用到自定义进度条样式,我们一般实现的也是下面的第一种,至于第二种的圆角进度,网上介绍的资料也不是很多,这里一起展示一下这两种的实现. 下面开始看代码,先从主界面布局开始看起: <ProgressBar style="@android:style/Widget.ProgressBar.Horizontal" android:layout_width="match_parent" android:layout_height="20dp&qu