首页 > 编程 > C# > 正文

C# Winform下载文件并显示进度条的实现代码

2020-01-24 02:38:56
字体:
来源:转载
供稿:网友

方法一:

效果如下图所示:

代码如下:

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;   }  } }}

实现方法二:

WinForm下载文件并显示下载进度示例

/// <summary>/// 显示进度/// </summary>/// <param name="val"></param>private void ProgressBar_Value(int val){ progressBar1.Value = val; label1.Text = val.ToString() + "%";}/// <summary>/// 下载文件/// </summary>/// <param name="url"></param>/// <param name="savefile"></param>/// <param name="downloadProgressChanged"></param>/// <param name="downloadFileCompleted"></param>private void DownloadFile(string url, string savefile, Action<int> downloadProgressChanged, Action downloadFileCompleted){ WebClient client = new WebClient(); if (downloadProgressChanged != null) {  client.DownloadProgressChanged += delegate(object sender, DownloadProgressChangedEventArgs e)  {   this.Invoke(downloadProgressChanged, e.ProgressPercentage);  }; } if (downloadFileCompleted != null) {  client.DownloadFileCompleted += delegate(object sender, AsyncCompletedEventArgs e)  {   this.Invoke(downloadFileCompleted);  }; } client.DownloadFileAsync(new Uri(url), savefile);}delegate void Action(); //.NET Framework 2.0得自定义委托Action/// <summary>/// 点击下载/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button1_Click(object sender, EventArgs e){ DownloadFile("http://xiazai.VeVB.COm/update.zip", @"F:update.zip", ProgressBar_Value, null);}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表