描述:-
程序运行界面截图:
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); }
个人签名:己所不欲勿施于人
上一篇:批量检测指定ip某些端口是否开启,用来做什么自己想吧!!!
下一篇:winform程序如何做到开机自动启动