/**
* DownloadFile1(url, savePath, progressBar1, progress,speed);
* URL 文件下载地址
* savePath 下载的文件存放路径
* prog 进度条 工具箱去找 progressBar1,显示进度条
* progress label 设置的name值是progress,显示进度百分比列
* speed label 设置的name值是speed,显示实时下载速度
*/
public void DownloadFile1(string URL, string savePath, ProgressBar prog, Label progress,Label speed)
{
float percent = 0;
try
{
System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(URL);
System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse();
long totalBytes = myrp.ContentLength;
if (prog != null)
{
prog.Maximum = (int)totalBytes;
}
Stream st = myrp.GetResponseStream();
Stream so = new FileStream(savePath, FileMode.Create);
long totalDownloadedByte = 0;
byte[] by = new byte[1024];
int osize = st.Read(by, 0, (int)by.Length);
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start(); // 开始监视代码
while (osize > 0 && totalBytes > totalDownloadedByte)
{
totalDownloadedByte = osize + totalDownloadedByte;
Application.DoEvents();
so.Write(by, 0, osize);
if (prog != null)
{
prog.Value = downTotal = (int)totalDownloadedByte;
}
osize = st.Read(by, 0, (int)by.Length);
percent = (float)totalDownloadedByte / (float)totalBytes * 100;
//保留N位四舍五入
percent = (float)Math.Round(percent, 2);
if (percent >= 99.99)
{
Thread.Sleep(600);//睡眠
}
float diff = TotalMilliseconds - LastMilliseconds;//时间差,约1秒时间
string str = "0 KB/s";
if (diff >= 1000)
{
float downed = ((int)totalDownloadedByte - oldDownTotal) / 1024;
//downed = 1865;
if (downed >= 1024)
{
str = (float)Math.Round((downed / 1024), 2) + " M/s";
}
else
{
str = downed.ToString() + " KB/s";
}
speed.Text = str;
oldDownTotal = (int)totalDownloadedByte;
LastMilliseconds = TotalMilliseconds;
}
TotalMilliseconds = (float)stopwatch.Elapsed.TotalMilliseconds;
progress.Text = percent.ToString() + "%";
Application.DoEvents(); //必须加注这句代码,否则label1将因为循环执行太快而来不及显示信息
}
so.Close();
st.Close();
if (percent >= 100)
{
Thread.Sleep(1000);//睡眠
prog = null;
this.Close();
Process.Start(savePath);//运行下载好的文件
Process.GetCurrentProcess().Kill();//退出所有程序
}
}
catch (Exception e)
{
MessageBox.Show(e.Message);
throw;
}
}
效果