C# Common Code

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 + "%" ;
         }
     }
}

转载于:https://www.cnblogs.com/TddCoding/p/8724296.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值