1 using System;
2 using System.Collections.Generic;
3 using System.ComponentModel;
4 using System.Data;
5 using System.Drawing;
6 using System.Linq;
7 using System.Text;
8 using System.Threading.Tasks;
9 using System.Windows.Forms;
10 using MetroFramework.Forms;
11
12 namespace KMS_Starter
13 {
14 public partial class Form2 : MetroForm
15 {
16 public Form2()
17 {
18 InitializeComponent();
19 }
20
21 private void Form2_Load(object sender, EventArgs e)
22 {
23
24 }
25
26 private void metroButton1_Click(object sender, EventArgs e)
27 {
28 DownloadFile("http://localhost:1928/WebServer/downloader/123.rar", @"C:\123.rar", metroProgressBar1, label2);
29 }
30 ///
31 /// c#,.net 下载文件
32 ///
33 /// 下载文件地址
34 ///
35 /// 下载后的存放地址
36 /// 用于显示的进度条
37 ///
38 public void DownloadFile(string URL, string filename, System.Windows.Forms.ProgressBar prog, System.Windows.Forms.Label label1)
39 {
40 float percent = 0;
41 try
42 {
43 System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(URL);
44 System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse();
45 long totalBytes = myrp.ContentLength;
46 if (prog != null)
47 {
48 prog.Maximum = (int)totalBytes;
49 }
50 System.IO.Stream st = myrp.GetResponseStream();
51 System.IO.Stream so = new System.IO.FileStream(filename, System.IO.FileMode.Create);
52 long totalDownloadedByte = 0;
53 byte[] by = new byte[1024];
54 int osize = st.Read(by, 0, (int)by.Length);
55 while (osize > 0)
56 {
57 totalDownloadedByte = osize + totalDownloadedByte;
58 System.Windows.Forms.Application.DoEvents();
59 so.Write(by, 0, osize);
60 if (prog != null)
61 {
62 prog.Value = (int)totalDownloadedByte;
63 }
64 osize = st.Read(by, 0, (int)by.Length);
65
66 percent = (float)totalDownloadedByte / (float)totalBytes * 100;
67 label2.Text = "当前补丁下载进度" + percent.ToString() + "%";
68 System.Windows.Forms.Application.DoEvents(); //必须加注这句代码,否则label1将因为循环执行太快而来不及显示信息
69 }
70 so.Close();
71 st.Close();
72 }
73 catch (System.Exception)
74 {
75 throw;
76 }
77 }
78 }
79 }