wpf文件复制显示进度条效果

也有一些介绍,先看运行效果

xaml如下:

xaml代码


<window x:class="wpfthreadtest.mainwindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
title="mainwindow" closed="window_closed" loaded="window_loaded" height="209" width="537" resizemode="noresize">
<grid height="186">
<grid.columndefinitions>
<columndefinition width="132*" />
<columndefinition width="236*" />
<columndefinition width="147*" />
</grid.columndefinitions>
<grid.rowdefinitions>
<rowdefinition height="auto" />
<rowdefinition height="auto" />
<rowdefinition height="auto" />
<rowdefinition height="auto" />
<rowdefinition height="auto" />
</grid.rowdefinitions>
<textblock name="textblock1" text="当前时间" margin="35 10" height="auto" width="auto" />
<textbox grid.column="1" name="displaytimebythread" height="auto" margin="0 10" />
<textblock grid.row="1" name="textblock2" margin="35 10 0 10 " text="源文件位置" />
<textbox grid.column="1" grid.row="1" name="srcfile" margin="0 10" />
<textbox grid.column="1" grid.row="2" name="savefilepath" margin="0 10" />
<textblock grid.row="2" name="textblock3" text="目标文件位置" margin="35 10 0 10" />
<button content="..." grid.column="2" grid.row="1" name="button1" margin="10,10,66,10" click="button1_click" />
<button content="..." grid.column="2" grid.row="2" name="button2" margin="10,10,66,10" height="23" click="button2_click"/>
<button content="开始时间线程" grid.column="2" name="button3" margin="10,10,35,10" height="23" click="button3_click" />
<button content="开始文件copy线程" grid.column="2" grid.row="3" height="29" horizontalalignment="left" name="button4" verticalalignment="top" width="119" click="button4_click" />
<textblock grid.row="3" name="copyflag" text="开始复制" />
<textblock name="displaycopyinfo" text="文件copy进行中" grid.row="3" grid.column="1" />
<progressbar grid.column="1" grid.row="4" margin="0 2" height="8" name="copyprogress" />
</grid>
</window>

后台cs

 

后台cs内容


1 namespace wpfthreadtest
2 {
3 /// <summary>
4 /// mainwindow.xaml 的交互逻辑
5 /// </summary>
6   public partial class mainwindow : window
7 {
8 thread timethread;
9 thread copythread;
10 public mainwindow()
11 {
12 initializecomponent();
13 this.displaytimebythread.text = datetime.now.tolocaltime().tostring("yyyy年mm月dd日 hh:mm:ss"); ;
14 timethread = new thread(new threadstart(dispatcherthread));
15 }
16 private void button3_click(object sender, routedeventargs e)
17 {
18 timethread.start();
19 }
20 public void dispatcherthread()
21 {
22 //可以通过循环条件来控制ui的更新
23   while (true)
24 {
25 ///线程优先级,最长超时时间,方法委托(无参方法)
26   displaytimebythread.dispatcher.begininvoke(
27 dispatcherpriority.normal, new action(updatetime));
28 thread.sleep(1000);
29 }
30 }
31
32
33 private void updatetime()
34 {
35 this.displaytimebythread.text = datetime.now.tolocaltime().tostring("yyyy年mm月dd日 hh:mm:ss");
36 }
37
38 private void window_closed(object sender, eventargs e)
39 {
40 ///关闭所有启动的线程
41 timethread.abort();
42 copythread.abort();
43 application.current.shutdown();
44 }
45
46 private void button1_click(object sender, routedeventargs e)
47 {
48 ///设定要复制的文件全路径
49 openfiledialog openfile = new openfiledialog();
50 openfile.addextension = true;
51 openfile.checkpathexists = true;
52 openfile.filter = "*.rar|*.rar|all files|*.*";
53 openfile.filterindex = 0;
54 openfile.multiselect = false;
55 bool? f=openfile.showdialog();
56 if (f!=null && f.value)
57 {
58 this.srcfile.text = openfile.filename;
59 }
60 }
61
62 private void button2_click(object sender, routedeventargs e)
63 {
64 ///设定目标文件全路径
65 savefiledialog savefile = new savefiledialog();
66 savefile.addextension = true;
67 savefile.filter = "*.rar|*.rar|all files|*.*";
68 savefile.filterindex = 0;
69
70 bool? f= savefile.showdialog();
71 if (f != null && f.value)
72 {
73 this.savefilepath.text = savefile.filename;
74 }
75 }
76
77 private void button4_click(object sender, routedeventargs e)
78 {
79 string filename=this.srcfile.text.trim();
80 string destpath=this.savefilepath.text.trim();
81 if(!file.exists(filename))
82 {
83 messagebox.show("源文件不存在");
84 return;
85 }
86
87 ///copy file and nodify ui that rate of progress of file copy
88 this.copyflag.text = "开始复制。。。";
89
90 //设置进度条最大值,这句代码写的有点郁闷
91 this.copyprogress.maximum = (new fileinfo(filename)).length;
92
93 //保存复制文件信息,以进行传递
94 copyfileinfo c = new copyfileinfo() { sourcepath = filename, destpath = destpath };
95 //线程异步调用复制文件
96 copythread = new thread(new parameterizedthreadstart(copyfile));
97 copythread.start(c);
98
99 this.copyflag.text = "复制完成。。。";
100
101
102 }
103 /// <summary>
104 /// 复制文件的委托方法
105 /// </summary>
106 /// <param name="obj">复制文件的信息</param>
107 private void copyfile(object obj)
108 {
109 copyfileinfo c = obj as copyfileinfo;
110 copyfile(c.sourcepath, c.destpath);
111 }
112 /// <summary>
113 /// 复制文件
114 /// </summary>
115 /// <param name="sourcepath"></param>
116 /// <param name="destpath"></param>
117 private void copyfile( string sourcepath,string destpath)
118 {
119 fileinfo f = new fileinfo(sourcepath);
120 filestream fsr = f.openread();
121 filestream fsw = file.create(destpath);
122 long filelength = f.length;
123 byte[] buffer = new byte[1024];
124 int n = 0;
125
126 while (true)
127 {
128 ///设定线程优先级
129 ///异步调用updatecopyprogress方法
130 ///并传递2个long类型参数filelength 与 fsr.position
131 this.displaycopyinfo.dispatcher.begininvoke(dispatcherpriority.systemidle,
132 new action<long, long>(updatecopyprogress), filelength, fsr.position);
133
134 //读写文件
135 n=fsr.read(buffer, 0, 1024);
136 if (n==0)
137 {
138 break;
139 }
140 fsw.write(buffer, 0, n);
141 fsw.flush();
142 thread.sleep(1);
143 }
144 fsr.close();
145 fsw.close();
146 }
147
148 private void updatecopyprogress(long filelength,long currentlength)
149 {
150 this.displaycopyinfo.text = string.format("总大小:{0},已复制:{1}", filelength, currentlength);
151 //刷新进度条
152 this.copyprogress.value = currentlength;
153 }
154
155 private void window_loaded(object sender, routedeventargs e)
156 {
157
158 }
159
160 }
161 public class copyfileinfo
162 {
163 public string sourcepath { get; set; }
164 public string destpath { get; set; }
165 }
166 }

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索string
, 文件
, 线程
, new
this
复制文件进度条不显示、java 复制文件 进度条、复制文件进度条不动、vb 复制文件 进度条、复制文件进度条红色,以便于您获取更多的相关知识。

时间: 2024-09-22 05:21:39

wpf文件复制显示进度条效果的相关文章

jQuery实现简单的文件上传进度条效果_jquery

本文实例讲述了jQuery实现文件上传进度条效果的代码.分享给大家供大家参考.具体如下: 运行效果截图如下: 具体代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>upload</title> <link rel="stylesheet" type="text/css" href=&quo

jQuery实现文件上传进度条效果

最近呢,老大让做一个进度条的效果出来,这个之前还真没做过.刚好这周没什么东西了,就拿这个来充一下数吧. 文件上传,得先准备一个"按钮": 这个看上去还是不错的吧,实现也是很简单的: <span class="upload-span">开始上传文件</span> <button>太丑了,就用span来做了,可控性强.添加点css: .upload-span{     display: inline-block;     width:

下载文件并显示进度条

  UINT DownloadFile(LPVOID pParam){ CWnd*   pwnd = AfxGetMainWnd(); CProgressCtrl* m_Prog = (CProgressCtrl*)pwnd->GetDlgItem(IDC_PROGRESS1); CButton*  bStart = (CButton*)pwnd->GetDlgItem(IDB_BTN_START);  char    filebuf[512]; CInternetSession netSes

Glide实现加载图片显示进度条效果

先来看看效果图: Glide作为最近几年刚开始流行起来的图片加载库,功能非常强大,我相信好多人都开始在项目中使用了,网上关于Glide的使用教程也非常多,最近在项目中要实现图片的进度条加载,在网上也没看到有现成的,就想着自己研究一下. 使用 Glide.with(MainActivity.this).using(new ProgressModelLoader( new ProgressHandler(MainActivity.this, progressImageView))). load("h

php+ajax文件上传进度条

ajax|上传 代码分为以下部分: demo.php - 上传过程处理 PLAIN TEXTPHP: <?php include 'UploadProgressMeter.class.php'; $fileWidget = new UploadProgressMeter(); if ($fileWidget->uploadComplete()) {        // 上传完毕的时候,从iframe发送一个js到主窗口表示一切ok        echo $fileWidget->fin

Asp.Net 无刷新文件上传并显示进度条的实现方法及思路_实用技巧

相信通过Asp.Net的服务器控件上传文件在简单不过了,通过AjaxToolkit控件实现上传进度也不是什么难事,为什么还要自己辛辛苦苦来 实现呢?我并不否认"拿来主义",只是我个人更喜欢凡是求个所以然.本篇将阐述通过Html,IHttpHandler和 IHttpAsyncHandler实现文件上传和上传进度的原理,希望对你有多帮助. 效果图: 本文涉及到的知识点:1.前台用到Html,Ajax,JQuery,JQuery UI 2.后台用到一般处理程序(IHttpHandler)和

基于ajax实现文件上传并显示进度条_javascript技巧

下面给大家分享下基于ajax实现文件上传并显示进度条.在jsp部分,需要设计一个表单,form的属性添加 enctype="multipart/form-data",设计一个iframe,作为隐藏.form的target等于iframe的name; 在servlet部分:文件上传用的Commons-FileupLoad,需要两个Jar,commons-fileupload和commons-io,少了第二个会报出找不到类的异常: 第一个servlet处理上传,及把上传进度保存到sessi

Asp.Net 无刷新文件上传并显示进度条的实现方法及思路

相信通过Asp.Net的服务器控件上传文件在简单不过了,通过AjaxToolkit控件实现上传进度也不是什么难事,为什么还要自己辛辛苦苦来 实现呢?我并不否认"拿来主义",只是我个人更喜欢凡是求个所以然.本篇将阐述通过Html,IHttpHandler和 IHttpAsyncHandler实现文件上传和上传进度的原理,希望对你有多帮助. 效果图: 本文涉及到的知识点: 1.前台用到Html,Ajax,JQuery,JQuery UI 2.后台用到一般处理程序(IHttpHandler)

文件管理器-android 复制大量文件,显示进度

问题描述 android 复制大量文件,显示进度 我在做一个android文件管理器,需要复制文件,我在子线程中执行,使用了Progress ,但是我不知道如何设置当前进度,以及总进度,我想通过文件的大小,但是怎获取已经复制的文件的大小呢,假如说一个大视频文件,视频文件的大小作为总进度,可以如何获取当前进度 解决方案 进度类有相关的方法,详细看一下