using System.ComponentModel
直接使用EgProgressBar方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
BackgroundWorker Bw =
new
BackgroundWorker();
ListView listView1 =
new
ListView();
public
void
EgProgressBar()
{
DirectoryInfo di =
new
DirectoryInfo(
@"C:/Windows"
);
FileInfo[] fi = di.GetFiles();
progressBar1.Maximum = fi.Length - 1;
//设置进度条的最大值
Bw.WorkerSupportsCancellation =
true
;
Bw.WorkerReportsProgress =
true
;
Bw.DoWork +=
new
DoWorkEventHandler(Add);
//绑定事件
Bw.ProgressChanged +=
new
ProgressChangedEventHandler(Progress);
Bw.RunWorkerCompleted +=
new
RunWorkerCompletedEventHandler(End);
Bw.RunWorkerAsync();
}
public
void
Add(
object
sender, DoWorkEventArgs e)
{
DirectoryInfo di =
new
DirectoryInfo(
@"C:/Windows"
);
foreach
(FileInfo item
in
di.GetFiles())
{
ListViewItem lvt =
new
ListViewItem();
//用listviewItem来存储获取到文件的信息
lvt.Text = item.FullName;
lvt.SubItems.Add(DateTime.Now.ToLongTimeString());
Thread.Sleep(500);
Bw.ReportProgress(listView1.Items.Count, lvt);
//把当前的进度报告出去,获取到第几个文件和该文件的信息
}
}
public
void
Progress(
object
sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
//获取第几个文件,用来改变进度条的进度
ListViewItem lv = e.UserState
as
ListViewItem;
listView1.Items.Add(lv);
//把最新获取到的文件信息添加到listview
}
public
void
End(
object
sender, RunWorkerCompletedEventArgs e)
{
progressBar1.Value = 0;
//进度条清0
}
|
传递方法参数RunWorkerAsync(参数)
获取方法 DoWorkEventArgs 的 e.Argument
结束时判定 Dowork方法 e.result 自动传递到completed 的e.result 中