//打开对话框选择文件
private void OpenDialogBox_Click(object sender, RoutedEventArgs e)
{
var openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "*|*";
openFileDialog.RestoreDirectory = true;
openFileDialog.ShowDialog();
//包含路径的文件名
var fileNames = openFileDialog.FileName;
//文件名
var name = openFileDialog.SafeFileName;
DownLoadBox.Text = fileNames;
DownLoadBox.Tag = name;
}
//点击下载下载文件
private void DownLoadButton_Click(object sender, RoutedEventArgs e)
{
string filePath = DownLoadBox.Text;
string name = DownLoadBox.Tag.ToString();
if (string.IsNullOrEmpty(name)) return;
if (filePath == null) return;
var file = new FileInfo(filePath);
//取到文件的总想长度
long length = file.Length;
#region 添加进度条
var stackpael = new StackPanel()
{
Margin = new Thickness(0, 3, 0, 5)
};
var lable = new System.Windows.Controls.Label();
var progressbar = new ProgressBar()
{
Margin = new Thickness(10, 10, 0, 13),
HorizontalAlignment = HorizontalAlignment.Left,
VerticalAlignment = VerticalAlignment.Top,
Width = 300,
Height = 30,
Maximum = length
};
stackpael.Children.Add(lable);
stackpael.Children.Add(progressbar);
DownLoadStackPanel.Children.Add(stackpael);
//创建实体,以方便多线程传值
Controls control = new Controls();
control.Lable = lable;
control.Name = name;
control.Progressbar = progressbar;
control.Path = filePath;
#endregion
//使用线程池下载文件
ThreadPool.QueueUserWorkItem(new WaitCallback(DownLoad), control);
}
#region 使用线程池下载文件void DownLoad(object control)
/// <summary>
/// 使用线程池下载文件
/// </summary>
/// <param name="control"> 参数</param>
private void DownLoad(object control)
{
var controls = control as Controls;
string name = controls.Name;
string filePath = controls.Path;
System.Windows.Controls.Label lable = controls.Lable;
ProgressBar progressBar = controls.Progressbar;
//存放下载文件的路径
string newPath = Path.GetFullPath("../../File");
if (name == null || filePath == null || lable == null || progressBar == null) return;
//下载
DownLoadFile(name, filePath, newPath, lable, progressBar);
}
#endregion
#region 下载void DownLoadFile(string name, string filePath, string newPath, System.Windows.Controls.Label lable, ProgressBar progressBar)
/// <summary>
/// 下载
/// </summary>
/// <param name="name">文件名</param>
/// <param name="filePath">文件路径</param>
/// <param name="newPath">存放文件的路径</param>
/// <param name="lable">存放文件名的控件</param>
/// <param name="progressBar">进度条</param>
private void DownLoadFile(string name, string filePath, string newPath, System.Windows.Controls.Label lable, ProgressBar progressBar)
{
newPath = newPath + "\\" + Guid.NewGuid() + name;
//FileMode.Create创建文件 FileMode.Open 打开文件
using (Stream so = new FileStream(newPath, FileMode.Create))
{
using (Stream st = new FileStream(filePath, FileMode.Open))
{
byte[] by = new byte[1024 * 1024 * 100];
int osize = st.Read(by, 0, (int)by.Length);
int lengths = osize;
//被主线程调用
Action a = () =>
{
lable.Content = name;
};
this.Dispatcher.BeginInvoke(a);
while (osize > 0)
{
so.Write(by, 0, osize);
osize = st.Read(by, 0, (int)by.Length);
lengths += osize;
Action action = () =>
{
//进度条
progressBar.Value = lengths;
};
progressBar.Dispatcher.BeginInvoke(action);
}
}
}
}
#endregion
- C# WPF 解压缩7zip文件 带进度条 sevenzipsharp
vs2013附件 :http://download.csdn.net/detail/u012663700/7427461 C# WPF 解压缩7zip文件 带进度条 sevenzipsharp W ...
- VC下载文件显示进度条
VC下载文件显示进度条 逗比汪星人2009-09-18上传 by Koma http://blog.csd.net/wangningyu http://download.csdn.net/deta ...
- Android开发(24)---安卓中实现多线程下载(带进度条和百分比)
当我们学完java中多线程的下载后,可以将它移植到我们的安卓中来,下面是具体实现源码: DownActivity.java package com.example.downloads; import ...
- VC下载文件 + 显示进度条
在codeproject里找了许久,发现这样一个VC下载文件并显示进度条的源码,于是添加了些中文注释: 1.下载线程函数: UINT DownloadFile(LPVOID pParam) { CWn ...
- webclient下载文件 带进度条
private void button1_Click(object sender, EventArgs e) { doDownload(textBox1.Text.Trim()); } private ...
- UrlDownloadFile, 线程下载文件, 带进度条
unit FileDownLoadThread; interface uses Classes, SysUtils, Windows, ActiveX, UrlMon; const S_ABORT = ...
- libcurl开源库在Win32程序中使用下载文件显示进度条实例
一.配置工程引用libcurl库 #define CURL_STATICLIB #include "curl/curl.h" #ifdef _DEBUG #pragma comme ...
- Android 下载文件 显示进度条
加入两个权限 一个是联网,另一个是读写SD卡 <uses-permission android:name="android.permission.INTERNET">& ...
- axios 如何获取下载文件的进度条
exportFun(){ let _that = this const instance = this.axios.create({ onDownl ...
随机推荐
- [LeetCode][Python]17: Letter Combinations of a Phone Number
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 17: Letter Combinations of a Phone Numb ...
- Spring MVC 简单介绍
Spring MVC 是典型的mvc架构,适合web开发. controler 输入输出的控制器,也是对外view提供数据的接口,调用service层. model 数据,由bean组成(相应表),关 ...
- Android 读取Assets中图片
bgimg0 = getImageFromAssetsFile("Cat_Blink/cat_blink0000.png"); * * 从Assets中读取图片 */ privat ...
- NYOJ128 前缀式计算(栈的运用)
题目信息: http://acm.nyist.net/JudgeOnline/problem.php? pid=128 + 2 * + 3 4 5的值就是 37,详见输入输出. 输入 有多组測试数据, ...
- Java操作mongoDB2.6的常见API使用方法
对于mongoDB而言,学习方式和学习关系型数据库差不太多 開始都是学习怎样insert.find.update.remove,然后就是分页.排序.索引,再接着就是主从复制.副本集.分片等等 最后就是 ...
- oracle 提示口令失效解决方法
Oracle错误代码:ORA-28002. 受影响版本:Oracle11g以上版本. 导致密码消失的原因:Oracle 11g中默认的DEFAULT概要文件中口令有效期PASSWORD_LIFE_TI ...
- Orcale语句大全
原文地址:http://www.cnblogs.com/omygod/archive/2007/08/31/876620.html Oracle 语句大全 1. Oracle安装完成后的初始口令? ...
- Socket.io在线聊天室
从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎.chrome浏 ...
- C++的标准模板库(STL)简介
STL(Standard Template Library,标准模板库)是C++对泛型编程思想的实现,最早是惠普实验室开发的.在被引入C++之前该技术就已经存在了很长的一段时间.后来STL成为ANSI ...
- IIS发布网站后局域网其他用户不能访问问题(转)
如果本机能正常访问,而局域网其他用户不能访问,那么判断的结果很可能是防火墙问题. 解决方法: 既然问题出在Windows7或Windows Server 2008 R2的防火墙上,那么我们可以有以下两 ...