WPF下载远程文件,并显示进度条和百分比
1、xaml
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{ ////// MainWindow.xaml 的交互逻辑 /// 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); } ////// 判断远程文件是否存在 /// /// 文件URL ///存在-true,不存在-false 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 + "%"; } }}