C# 用带百分比的进度条显示下载文件进度,网上看到的教程都很麻烦,自己随便做了一个。用博客写编程果然很费劲,顺便做了个 Youtube Video。

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

namespace downloadDemo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        WebClient client;

        private void button1_Click(object sender, EventArgs e)
        {
            string url = textBox1.Text;
            if (!string.IsNullOrEmpty(url))
            {
                Uri uri = new Uri(url);
                string fileName = System.IO.Path.GetFileName(uri.AbsolutePath);
                client.DownloadFileAsync(uri, Application.StartupPath + "/" + fileName);
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            client = new WebClient();
            client.DownloadProgressChanged += client_DownloadProgressChanged;
            client.DownloadFileCompleted += client_DownloadFileCompleted;
        }

        void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
        {
            MessageBox.Show("Download Completed");
        }

        void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            progressBar1.Minimum = 0;
            double receive = double.Parse(e.BytesReceived.ToString());
            double total = double.Parse(e.TotalBytesToReceive.ToString());
            double percentage = receive / total * 100;
            lblStatus.Text = string.Format("{0:0.##}", percentage) + "%";
            progressBar1.Value = int.Parse(Math.Truncate(percentage).ToString());

        }
    }
}

另外如果想自己用KB大小显示的话也可以直接修改

lblStatus.Text = string.Format("{0:0.##}", percentage) + "%";

lblStatus.Text = receive.ToString() + "/" + total.ToString();

自己直接转换下KB单位就可以了。