您的位置:首页 > 编程语言 > C#

C# Winform下载文件并显示进度条

2016-01-05 16:51 363 查看
本来是要研究怎样判断下载完成,结果找到这个方法,可以在这个方法完成之后提示下载完成。



代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WinShowDown

{

    public partial class FrmMain : Form

    {

        public FrmMain()

        {

            InitializeComponent();

        }

        private void btnDown_Click(object sender, EventArgs e)

        {

            DownloadFile("http://localhost:1928/WebServer/downloader/123.rar", @"C:\123.rar", progressBar1, label1);

        }

        /// <summary>        

        /// c#,.net 下载文件        

        /// </summary>        

        /// <param name="URL">下载文件地址</param>       

        /// 

        /// <param name="Filename">下载后的存放地址</param>        

        /// <param name="Prog">用于显示的进度条</param>        

        /// 
        public void DownloadFile(string URL, string filename, System.Windows.Forms.ProgressBar prog, System.Windows.Forms.Label label1)

        {

            float percent = 0;

            try

            {

                System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(URL);

                System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse();

                long totalBytes = myrp.ContentLength;

                if (prog != null)

                {

                    prog.Maximum = (int)totalBytes;

                }

                System.IO.Stream st = myrp.GetResponseStream();

                System.IO.Stream 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;

                    System.Windows.Forms.Application.DoEvents();

                    so.Write(by, 0, osize);

                    if (prog != null)

                    {

                        prog.Value = (int)totalDownloadedByte;

                    }

                    osize = st.Read(by, 0, (int)by.Length);

                    percent = (float)totalDownloadedByte / (float)totalBytes * 100;

                    label1.Text = "当前补丁下载进度" + percent.ToString() + "%";

                    System.Windows.Forms.Application.DoEvents(); //必须加注这句代码,否则label1将因为循环执行太快而来不及显示信息
                }

                so.Close();

                st.Close();

            }

            catch (System.Exception)

            {

                throw;

            }

        }

    }

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: