zoukankan      html  css  js  c++  java
  • C#实现下载功能,可用于软件自动更新

    以前在百度写的文档,转移到此处

    软件截图:

    代码下载:

    http://twzy.ys168.com/   在代码下载文件夹中

    //代码:
    
    using System;
    using System.ComponentModel;
    using System.Net;
    using System.Threading;
    using System.Windows.Forms;
    namespace DownFile
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            string netPath = "http://wlkt.zufe.edu.cn/Skyclass/C91/Courseware/Bbs/080717071122.mp3";//需要下载的文件
            string filePath = "D:\just one last dance.mp3";//文件保存的路径
    
            delegate void delDownFileHandler(int totalNum, int num, int proc);//用于指示文件信息(文件大小,当前下载的数量,当前下载的百分比)
            delegate void delComDownFileHandler(bool isCompleted);//文件下载完成之后
    
            WebClient wc = new WebClient();
            private void button1_Click(object sender, EventArgs e)
            {
                wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(wc_DownloadProgressChanged);
                wc.DownloadFileCompleted += new AsyncCompletedEventHandler(wc_DownloadFileCompleted);
                progressBar1.Value = 0;
                label1.Text = "";
                button2.Enabled = true;
                button1.Enabled = false;
    
                //使用线程启动
                Thread td = new Thread(new ThreadStart(loadFile));
                td.IsBackground = true;
                td.Start();
    
            }
    
            //线程启动
            private void loadFile()
            {
                if (wc.IsBusy)
                {
                    wc.CancelAsync();
                }
                wc.DownloadFileAsync(new Uri(netPath), filePath);
    
            }
    
             //更新过程中触发的事件(在线程中不能直接操纵控件,因此用委托执行)
    
            void wc_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
            {
                this.Invoke(new delDownFileHandler(processShow), new object[] { (int)e.TotalBytesToReceive, (int)e.BytesReceived, e.ProgressPercentage });
            }
    
            //委托执行  (进度条和字符标识)
            private void processShow(int totalNum, int num, int proc)
            {
                progressBar1.Maximum = totalNum;
                progressBar1.Value = num;
                label1.Text = "正在下载:" + (num / (1024)).ToString() + "KB/" + (totalNum / 1024).ToString() + "KB   " + proc.ToString() + "%";
            }
    
            //完成更新之后触发的事件
            void wc_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
            {
                if (e.Cancelled)
                    this.Invoke(new delComDownFileHandler(comDownFile), new object[] { false });
                else
                    this.Invoke(new delComDownFileHandler(comDownFile), new object[] { true });
            }
    
            private void comDownFile(bool isCompleted)
            {
                if (isCompleted)
    
                    label1.Text = "下载完成";
                else
                    label1.Text = "下载取消";
    
                progressBar1.Value = 0;
                button1.Enabled = true;
                button2.Enabled = false;
    
            }
    
            //点击取消后
            private void button2_Click(object sender, EventArgs e)
            {
                wc.CancelAsync();
                wc.Dispose();
            }
        }
    }

    代码中的文件路径已经失效,请自行修改

  • 相关阅读:
    第33周二
    第33周一
    第32周日
    第32周六
    RichTextBox 右键显示 ContextMenuTrip
    关于 Head First SQL 中文版
    linux进程通信之共享内存
    chroot 与 jail
    SQL基础--> 约束(CONSTRAINT)
    MessageDigest简单介绍
  • 原文地址:https://www.cnblogs.com/twzy/p/4922991.html
Copyright © 2011-2022 走看看