文件下载时显示进度条

winform下显示文件下载进度(转)

原文:http://www.cnblogs.com/greatverve/archive/2011/05/17/csharp-down.html

文件下载时显示进度条

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;

            }

        }

    }

}

 

你可能感兴趣的:(文件下载)