c# 实现文件下载功能,带下载进度条,可用到软件的自动更新中

技术文摘
0 935
xukai
凯特云(xukai) 5 2021/1/19 18:44:59
编辑此贴 收藏

描述:-




程序运行界面截图:

1、实例一个委托:

 private delegate void setText();

2、定义一个线程内方法:

public void Threadp()
        {
            try
            {
                setText d = new setText(downFile); //实例化一个委托

                this.Invoke(d); //在拥用此控件的基础窗体句柄的线程上执行指定的委托
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

3、下载文件的方法:

 public void downFile()
        {
            string updateFileUrl = textBox1.Text.Trim();
            long fileLength = 0;
            try
            {
                int readCountOnce = 5;//每次下载的字节数,该值越大,下载越快
                WebRequest webReq = WebRequest.Create(updateFileUrl);
                WebResponse webRes = webReq.GetResponse();
                fileLength = webRes.ContentLength;

                pbDownFile.Value = 0;
                pbDownFile.Maximum = (int)fileLength;
                try
                {
                    Stream srm = webRes.GetResponseStream();
                    StreamReader srmReader = new StreamReader(srm);
                    byte[] bufferbyte = new byte[fileLength];
                    int allByte = (int)bufferbyte.Length;
                    int startByte = 0;
                    while (fileLength > 0)
                    {
                        Application.DoEvents();
                        int downByte = srm.Read(bufferbyte, startByte, allByte > readCountOnce ? readCountOnce : allByte);
                        if (downByte == 0) { break; };
                        startByte += downByte;
                        allByte -= downByte;
                        pbDownFile.Value += downByte;

                        float part = (float)startByte / readCountOnce;
                        float total = (float)bufferbyte.Length / readCountOnce;
                        int percent = Convert.ToInt32((part / total) * 100);

                        this.label_precess.Text = percent.ToString() + "%";

                    }

                    string tempPath = Application.StartupPath + "//files//";
                    if (!Directory.Exists(tempPath))
                    {
                        Directory.CreateDirectory(tempPath);
                    }
                    tempPath += DateTime.Now.ToString("yyyyMMddHHmmss");
                    FileStream fs = new FileStream(tempPath, FileMode.OpenOrCreate, FileAccess.Write);
                    fs.Write(bufferbyte, 0, bufferbyte.Length);
                    srm.Close();
                    srmReader.Close();
                    fs.Close();


                }
                catch (WebException ex)
                {
                    MessageBox.Show("更新文件下载失败!" + ex.Message.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (WebException ex1)
            {
                MessageBox.Show("更新文件下载失败!" + ex1.Message.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }
        }

4、万事具备, 只欠东风了,来一个选择文件路径的按钮(文件路径可以是网络路径)

private void button2_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                this.textBox1.Text = ofd.FileName;
            }
        }

5、开始下载按钮事件:

try
            {
                //string UpdateFile = textBox1.Text.Trim();
                Thread threadDown = new Thread(new ThreadStart(Threadp));
                threadDown.IsBackground = true;
                threadDown.Start();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }



个人签名:己所不欲勿施于人

回帖
  • 消灭零回复
本周热议
html+css+jquery 实现超帅留言墙效果!超帅,不喜勿喷!附完整demo 71
c# winform 身份证信息读取 14
和客服之间的神沟通 4
c#如何集成控制Led屏,实现数据发送自动开机、关机等操作! 3
关于站点启用HTTPS访问的通知 1
非法访问资源ip地址公布 1
不用写一句sql的ORM框架,支持多种数据库 1
c#如何获取电脑mac地址,超简单! 0
批量检测指定ip某些端口是否开启,用来做什么自己想吧!!! 0
c# 实现文件下载功能,带下载进度条,可用到软件的自动更新中 0
热门资讯
【每日一习话】把事业放在心上 把责任扛在肩上 662 
联播+ | 谋定而动 习近平引领京津冀携手下好“一盘棋” 539 
强力堆料,几乎没有短板、铭瑄iCraft B550M电竞之心主板评测 488 
第一观察 | 从两会“如期”召开看百年大党的执政能力 485 
看图猜成语:明明很简单,是不是大意了 483 
玖月奇迹王小玮近照曝光!穿紧身裤秀出小鸟腿,皮肤白到发光 478 
美媒承认搞错了,但已经来不及了 470 
《奇葩说》第七季总决赛,肖骁用不是自己风格的夺冠后,获得表扬 464 
广东一男子离职索赔270万,公司:你月薪才25万 459 
成人体验馆被封,客人一天点3个娃娃:男人的孤独,谁能懂? 451 
王霜首次回应结束留洋原因:不因贾秀全 只因这3个字 450 
被开除,程序员将公司告上法庭,公司怒怼:代码你写的,你担责 446 
美日共同发表"对中国措辞最强硬"声明 外交部撂重话 440 
扒女明星每日穿搭,千元Coach这样搭,千元CHANEL这样买! 438 
“波塞冬”无法拦截?俄军事专家:只能在发射前攻击它的母艇 418