//打开对话框选择文件
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 ...
随机推荐
- NOI2014 Day1
NOI2014 Day1 起床困难综合症 题目描述:给出\(n\)个操作,每个操作包含一种运算\((XOR.OR.AND)\)和一个数,已知一开始的数字为\([0, m]\),问经过\(n\)次操作后 ...
- poj2365---求多边形边长总和
#include <stdio.h> #include <stdlib.h> #include<math.h> #define pi acos(-1) struct ...
- transition与visibility与display
http://www.zhangxinxu.com/wordpress/2013/05/transition-visibility-show-hide/ 术语解释是: visibility: 离散步骤 ...
- ios webview 加载含有中文的URL网页显示白屏
1. ios中的webview加载的URL不可以含有中文,解决办法说将中文字符转码, 如下: - (NSString *)URLEncodeString { NSCharacterSet *set = ...
- 谷歌识图、google识图如何知道图片相似?
转自:http://www.hahait.com/news/185.html 原理非常简单易懂.我们可以用一个快速算法,就达到基本的效果.这里的关键技术叫做“感知哈希算法”(Perceptual ha ...
- 我的小前端 (2)—— JQ和zepto
没有什么特别新技术,就是记录我做移动端遇到的问题 2016-02-16 关于JS库 JQ很简单,网上很多插件效果都依赖它,但JQ库很大 zepto.js用简单效果,很好用 <script src ...
- 【Java并发编程】并发编程大合集-值得收藏
http://blog.csdn.net/ns_code/article/details/17539599这个博主的关于java并发编程系列很不错,值得收藏. 为了方便各位网友学习以及方便自己复习之用 ...
- Nutch安装的几个网址
RunNutchInEclipse - Nutch Wiki http://wiki.apache.org/nutch/RunNutchInEclipse Index of /apache/nut ...
- 指定hive输出格式
0.11版本以前: sed -e 's/\x01/|/g' file 0.11版本以后: insert overwrite local directory '/opt/aimcpro/libc/tes ...
- 用css控制一个DIV画图标。
在实际开发中,我们会用到一些小图形,图标.大多数情况下都是用图片来实现的,同时对图片进行处理使图片大小尽可能的缩小.但是图片在怎么处理也是按KB来算的.但是要是用CSS画,只要用很少的空间就能完成同样 ...