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

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

  • 相关阅读:
    BZOJ1257:[CQOI2007]余数之和——题解+证明
    BZOJ3781:小B的询问——题解
    BZOJ2038:[2009国家集训队]小Z的袜子——题解
    BZOJ3052 & UOJ58:[WC2013]糖果公园——题解
    BZOJ1086:[SCOI2005]王室联邦——题解
    BZOJ1878:[SDOI2009]HH的项链——题解
    BZOJ2453:维护队列——题解
    美团新零售招聘-高级测试开发(20k-50k/月)
    Shopee招聘-测试开发leader(30k-60k/月)
    蚂蚁金服招聘-无线测试开发(20k-36k/月)
  • 原文地址:https://www.cnblogs.com/twzy/p/4922991.html
Copyright © 2020-2023  润新知