zoukankan      html  css  js  c++  java
  • WPF下载远程文件,并显示进度条和百分比

    WPF下载远程文件,并显示进度条和百分比

    1、xaml

    <ProgressBar HorizontalAlignment="Left" Height="10" Margin="96,104,0,0" Name="pbDown" VerticalAlignment="Top" Width="100"/>
    <Label Content="Label" Name="label1" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="206,104,0,0"/>
    

     2、CS程序

    using System;
    using System.Windows;
    using System.Windows.Controls;
    using System.Net;
    using System.IO;
    using System.Threading;
    using System.Drawing;
    
    namespace WpfDemo
    {
        /// <summary>
        /// MainWindow.xaml 的交互逻辑
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
                if (HttpFileExist("http://183.62.138.31:57863/opt/resources/%E9%A3%8E%E6%99%AF/f1.jpg"))
                {
                    DownloadHttpFile("http://183.62.138.31:57863/opt/resources/%E9%A3%8E%E6%99%AF/f1.jpg", @"d:f1.jpg");
                }
            }
            public void DownloadHttpFile(String http_url, String save_url)
            {
                WebResponse response = null;
                //获取远程文件
                WebRequest request = WebRequest.Create(http_url);
                response = request.GetResponse();
                if (response == null) return;
                //读远程文件的大小
                pbDown.Maximum = response.ContentLength;
                //下载远程文件
                ThreadPool.QueueUserWorkItem((obj) =>
                {
                    Stream netStream = response.GetResponseStream();
                    Stream fileStream = new FileStream(save_url, FileMode.Create);
                    byte[] read = new byte[1024];
                    long progressBarValue = 0;
                    int realReadLen = netStream.Read(read, 0, read.Length);
                    while (realReadLen > 0)
                    {
                        fileStream.Write(read, 0, realReadLen);
                        progressBarValue += realReadLen;
                        pbDown.Dispatcher.BeginInvoke(new ProgressBarSetter(SetProgressBar), progressBarValue);
                        realReadLen = netStream.Read(read, 0, read.Length);
                    }
                    netStream.Close();
                    fileStream.Close();
    
                }, null);
            }        
            /// <summary>
            ///  判断远程文件是否存在
            /// </summary>
            /// <param name="fileUrl">文件URL</param>
            /// <returns>存在-true,不存在-false</returns>
            private bool HttpFileExist(string http_file_url)
            {
                WebResponse response = null;
                bool result = false;//下载结果
                try
                {
                    response = WebRequest.Create(http_file_url).GetResponse();
                    result = response == null ? false : true;
                }
                catch (Exception ex)
                {
                    result = false;
                }
                finally
                {
                    if (response != null)
                    {
                        response.Close();
                    }
                }
                return result;
            }
            public delegate void ProgressBarSetter(double value);
            public void SetProgressBar(double value)
            {
                //显示进度条
                pbDown.Value = value;
                //显示百分比
                label1.Content = (value / pbDown.Maximum) * 100 + "%";
            }
        }
    }
    
  • 相关阅读:
    Asp.net2.0 中自定义过滤器对Response内容进行处理 dodo
    自动化测试工具 dodo
    TestDriven.NET 2.0——单元测试的好助手(转) dodo
    JS弹出窗口的运用与技巧 dodo
    ElasticSearch 简介 规格严格
    修改PostgreSQL字段长度导致cached plan must not change result type错误 规格严格
    Linux系统更改时区(转) 规格严格
    mvn编译“Cannot find matching toolchain definitions for the following toolchain types“报错解决方法 规格严格
    ElasticSearch 集群 & 数据备份 & 优化 规格严格
    Elasticsearch黑鸟教程22:索引模板的详细介绍 规格严格
  • 原文地址:https://www.cnblogs.com/sntetwt/p/5310520.html
Copyright © 2011-2022 走看看