zoukankan      html  css  js  c++  java
  • [c#]WebClient异步下载文件并显示进度

    摘要

    在项目开发中经常会用到下载文件,这里使用winform实现了一个带进度条的例子。

    一个例子

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace Wolfy.DownLoad
    {
        public partial class MainFrm : Form
        {
            private string _saveDir;
            public MainFrm()
            {
                InitializeComponent();
                _saveDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "download");
            }
    
            private void MainFrm_Load(object sender, EventArgs e)
            {
    
                if (!Directory.Exists(_saveDir))
                {
                    Directory.CreateDirectory(_saveDir);
                }
    
            }
    
            private void btnDownLoad_Click(object sender, EventArgs e)
            {
                string imageUrl = "http://image.3761.com/nvxing/2016022921/2016022921382152113.jpg";
    
                string fileExt = Path.GetExtension(imageUrl);
                string fileNewName = Guid.NewGuid() + fileExt;
                bool isDownLoad = false;
                string filePath = Path.Combine(_saveDir, fileNewName);
                if (File.Exists(filePath))
                {
                    isDownLoad = true;
                }
                var file = new FileMessage
                   {
                       FileName = fileNewName,
                       RelativeUrl = "nvxing/2016022921/2016022921382152113.jpg",
                       Url = imageUrl,
                       IsDownLoad = isDownLoad,
                       SavePath = filePath
                   };
    
                if (!file.IsDownLoad)
                {
    
                    string fileDirPath = Path.GetDirectoryName(file.SavePath);
                    if (!Directory.Exists(fileDirPath))
                    {
                        Directory.CreateDirectory(fileDirPath);
                    }
                    try
                    {
                        WebClient client = new WebClient();
                        client.DownloadFileCompleted += client_DownloadFileCompleted;
                        client.DownloadProgressChanged += client_DownloadProgressChanged;
                        client.DownloadFileAsync(new Uri(file.Url), file.SavePath, file.FileName);
                    }
                    catch
                    {
    
                    }
    
                }
            }
            void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
            {
                if (e.UserState != null)
                {
                    this.lblMessage.Text = e.UserState.ToString() + ",下载完成";
                }
            }
    
            void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
            {
                this.proBarDownLoad.Minimum = 0;
                this.proBarDownLoad.Maximum = (int)e.TotalBytesToReceive;
                this.proBarDownLoad.Value = (int)e.BytesReceived;
                this.lblPercent.Text = e.ProgressPercentage + "%";
            }
        }
    }

    测试

  • 相关阅读:
    Selenium常用API的使用java语言之7-控制浏览器操作
    Selenium常用API的使用java语言之6-WebDriver常用方法
    Selenium常用API的使用java语言之5-selenium元素定位
    Selenium常用API的使用java语言之4-环境安装之Selenium
    Selenium常用API的使用java语言之3-selenium3 浏览器驱动
    Selenium常用API的使用java语言之2-环境安装之IntelliJ IDEA
    ES6常用七大特性
    css实现类似朋友圈九宫格缩略图完美展示
    NodeJS入门篇
    viewport其实没那么难理解
  • 原文地址:https://www.cnblogs.com/wolf-sun/p/6699733.html
Copyright © 2011-2022 走看看