基本信息
源码名称:C# WinINet 下载文件 示例源码
源码大小:0.08M
文件格式:.zip
开发语言:C#
更新时间:2017-05-30
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):78630559

本次赞助数额为: 2 元 
   源码介绍

除了 WebClient 我们还可以使用一组 WindowsAPI 来完成下载任务。这就是 Windows Internet,简称 WinINet



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WinInetDemo3
{
    public partial class DownloadProcessForm : Form
    {
        private BackgroundWorker _BGWorker = new BackgroundWorker();
        private DownloadManager _manager = null;
        private Logging _log = null;

        public DownloadProcessForm()
        {
            InitializeComponent();

            _BGWorker.WorkerReportsProgress = true;
            _BGWorker.WorkerSupportsCancellation = true;

            _BGWorker.DoWork  = _BGWorker_DoWork;
            _BGWorker.RunWorkerCompleted  = _BGWorker_RunWorkerCompleted;
            _BGWorker.ProgressChanged  = _BGWorker_ProgressChanged;

            this.Shown  = InstallProcessForm_Shown;
            _log = new Logging("log.txt");
        }

        private void BtnCancel_Click(object sender, EventArgs e)
        {
            _BGWorker.CancelAsync();
            _manager.Cancel();
        }

        private void InstallProcessForm_Shown(object sender, EventArgs e)
        {
            // 当窗口打开后就开始后台的安装
            _BGWorker.RunWorkerAsync();
        }

        private void _BGWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            DownloadInfo info = e.UserState as DownloadInfo;
            if (info != null)
            {
                this.progressBar1.Value = info.Persent;
                if (info.Speed != 0)
                {
                    this.label1.Text = info.Speed   "K/s";
                }              

                if (info.Message == "已取消下载")
                {
                    _log.Log("下载被取消.");
                    this.Close();
                }

                _log.Log("Persent is "   info.Persent   "% ,"   "Speed is "   info.Speed   "K/s .");
            }
        }

        private void _BGWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            // 下载已完成
            this.label1.Text = "下载已完成";
            this.BtnCancel.Visible = false;
            this.BtnOK.Visible = true;
            this.BtnOK.Location = this.BtnCancel.Location;
        }

        private void _BGWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker bgWorker = sender as BackgroundWorker;
            _manager = new DownloadManager(bgWorker);

            // 如果下面的连接不可用,请自行更换一个可用的下载链接
            string url = "http://download.firefox.com.cn/releases-sha2/stub/official/zh-CN/Firefox-latest.exe";
            Random rdm = new Random();
            string s = rdm.Next().ToString();
            url  = "?"   s;

            _manager.DownloadFile(url, "firefox.exe");
            _manager.Dispose();
        }

        private void BtnOK_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }

    internal class DownloadInfo
    {
        public int Persent { get; set; }

        public string Message { get; set; }

        // K/s
        public int Speed { get; set; }
    }
}