标签:string win summary 文件 maximum code lin sel byte
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 + "%" ; } } } |
标签:string win summary 文件 maximum code lin sel byte
原文地址:https://www.cnblogs.com/TddCoding/p/8724296.html