以下代码,会用到C#线程、进程以及委托的相关知识,不明白的朋友,可以先补一下相关知识。
注:在本文后面附有C#多线程及委托的相关文章,大家可以参考下。
注意,已经在D://WORK//111这个文件夹中故意存放了很多的文件,同时也创建了D://WORK//222这个文件夹用于接受copy过来的文件。
看代码吧。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.IO;
namespace WindowsFormsApplication2
{
/// <summary>
/// date:2012年3月2日17
/// author:Ryan.wan
/// </summary>
public partial class Form1 : Form
{
private Thread threadcount; //定义线程
delegate void setpro(int count,int index); //定义委托
setpro SetPro;
private event EventHandler sucevent; //事件
int index = 0;
int count = 0;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
SetPro = new setpro(changepar);
threadcount = new Thread(new ThreadStart(run));
threadcount.IsBackground = true;
threadcount.Start();
sucevent += new EventHandler(Form1_sucevent);
}
private void changepar(int count1,int value)
{
this.progressBar1.Maximum = count1;
this.progressBar1.Value = value;
if (this.progressBar1.Value == this.progressBar1.Maximum)
{
sucevent(this, new EventArgs());
}
}
private void run()
{
String[] strpath = Directory.GetFiles("D:work111");
count = strpath.Length;
for (int i = 0; i < strpath.Length; i++)
{
if (File.Exists(strpath[i].Replace("111", "222")))
{
File.Delete(strpath[i].Replace("111", "222"));
}
File.Copy(strpath[i], strpath[i].Replace("111", "222"));
index = i + 1;
this.progressBar1.Invoke(SetPro, new object[] { count, index });
}
}
void Form1_sucevent(object sender, EventArgs e)
{
threadcount.Abort();
MessageBox.Show("完成了");
}
}
}
附1,C#多线程的文章
C# 多线程更新进度条progressBar控件的代码一例
c# 多线程操作progressBar进度条控件的例子
c# asp.net 多线程实例(经典)
c#多线程读取注册表 c#多线程的小例子
附2,C#委托与事件的相关文章
C#入门学习笔记之事件和委托的实例
C#泛型:泛型特点、泛型继承、泛型接口、泛型委托学习笔记
学习 asp.net 的事件与委托
c# 委托浅析
c# 委托反射 DataTable转换为实体集的方法
c# 委托与事件的小例子
c#使用委托反射将DataTable转换为实体集的代码