C# 程序检测更新 下载 + 进度条

这段代码展示了如何使用C#实现从URL下载文件,同时更新进度条和显示下载速度。通过HttpWebRequest和HttpWebResponse创建请求并获取响应,使用Stream读取和写入文件,并通过Stopwatch计算下载速度。程序会实时更新进度百分比和速度信息。
摘要由CSDN通过智能技术生成
		/**
         * 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;
            }
        }

效果 在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值