//打开对话框选择文件
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 ...
随机推荐
- UberX及以上级别车奖励政策(优步北京第二、三组)
优步北京第二.三组: 定义为2015年6月1日至7月19日激活的司机(以优步后台数据显示为准) 滴滴快车单单2.5倍,注册地址:http://www.udache.com/如何注册Uber司机(全国版 ...
- Andrew Ng Machine learning Introduction
1. 机器学习的定义:Machine learning is programming computers to optimize a performance criterion(优化性能标准) usi ...
- Android的应用程序的异常处理2
1.自定义一个类(MaApp)继承Application 2.在清单文件中的Application选项菜单对应的name属性中添加MyApp 3.重写application中的onCreate方法 4 ...
- Swift学习笔记:类和结构
一.类和结构的异同 类和结构有一些相似的地方.它们都能够: 1. 定义一些能够赋值的属性: 2. 定义具有功能性的方法 3. 定义下标.使用下标语法 4. 定义初始化方法来设置初始状态 5. 在原实现 ...
- 深入理解Linux网络技术内幕——中断与网络驱动程序
接收到帧时通知驱动程序 在网络环境中.设备(网卡)接收到一个数据帧时,须要通知驱动程序进行处理. 有一下几种通知机制: 轮询: 内核不断检查设备是否有话要说.(比較耗资源,但在一些情况 ...
- HTML之学习笔记(五)图片加载
Html图片的处理一般采用<img>标签 语法: 例如<img src="地址" /> 地址: ...
- MailBee的简单使用
保存为Eml文件方法:MailMessage.SaveMessage() 读取文件方法(不知道是不是我用的问题,没找到直接读取Eml文件的方法): MsgConvert conv = new MsgC ...
- Performance tool httperf
httperf: A relatively well-known open source utility developed by HP, for Linux operating systems on ...
- 一个给力的html5 画多边形的例子
只需改变参数就能画出你想要的多边形,代码简单!不得不惊叹canvas的强大! 代码奉上 <!doctype html> <html> <head> <meta ...
- K-Modes算法[聚类算法]
聚类算法k-Modes的实现 <?php /* *Kmodes算法(聚类算法的实现) */ /* *获取簇的数目 */ //----------------------------------- ...