C#如何实现下载功能,可用于软件自动更新

以前在百度写的文档,转移到此处 软件截图: 代码下载: http: twzy ys168 com 在代码下载文件夹中 代码:using

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

 

软件截图:

 

 

代码下载:

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();
        }
    }
}

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