• 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 + "%";
            }
        }
    }
    
  • 相关阅读:
    mysql非安装包安装教程
    HTML和CSS <h1> --3-- <h1>
    HTML和CSS <h1> --2-- <h1>
    HTML和CSS <h1> --1-- <h1>
    软件工程之四则运算总结
    图论算法 有图有代码 万字总结 向前辈致敬
    【万里征程——Windows App开发】使用Toast通知
    【万里征程——Windows App开发】设置共享(共享源和共享目标)
    【万里征程——Windows App开发】如何使用粘贴板
    【万里征程——Windows App开发】在应用中集成搜索
  • 原文地址:https://www.cnblogs.com/sntetwt/p/5310520.html
Copyright © 2020-2023  润新知