因为对线程和进度条不了解, 所以程序的代码我已经写好了,现在就是不知道怎么增加一个进度条。
程序功能如下,用户选择目录,判断目录下的csv文件,含有汇总字样单独操作,没有汇总字样的单独操作,判断一次 进行一次操作,操作耗时,在后台线程中进行,现在就是不知道怎么给ui加上进度条,所以来问问,
下面是处理部分的代码:
foreach (string i in sArray) //遍历数组中的元素数据
if (System.Text.RegularExpressions.Regex.IsMatch(i.ToString(), sPattern)) //使用正则表达式,判断当文本存在汇总字样时,进行的操作
{
//MessageBox.Show((i.ToString()));
thread1 = new Thread(new ThreadStart(delegate { OpenCollectCSV(i.ToString()); }));
thread1.Start();
//需要写对汇总表操作的代码
}
else
{
thread3 = new Thread(new ThreadStart(delegate { OpenDetailsCSV(i.ToString()); }));
thread3.Start();
//需要写对详细表的写入操作
}
private
void
Start_Click(
object
sender, EventArgs e)
{
this
.myProcessBar1.Task =
this
.Task;
this
.myProcessBar1.Run();
//开始工作线程 同时开始监听工作进度
}
//某个耗时操作 参数即当前进度
public
void
Task(
ref
float
percentage)
{
int
i = 0;
while
(i <
int
.MaxValue )
{
i++;
percentage = i / (
float
)
int
.MaxValue;
}
}
private
void
button1_Click(
object
sender, EventArgs e)
{
this
.myProcessBar1.Stop();
//暂停进度条 同时也暂停工作线程
}
private
void
button2_Click(
object
sender, EventArgs e)
{
this
.myProcessBar1.Resume();
//继续进度条 同时继续工作线程
}
private
void
button3_Click(
object
sender, EventArgs e)
{
this
.myProcessBar1.Abort();
//终止工作进程
}
private
void
button4_Click(
object
sender, EventArgs e)
{
this
.myProcessBar1.Run();
//这边位重新启动进度条
}
这个我看过啊
代码我就不写了,简单说一下原理。
1、放一个进度条控件这事非常简单,你一定会的,工具箱中找到ProgressBar放进窗体就行。
只是这进度条不会自己工作。
2、把工作完成当成100%,评估每一段工作完成的百分比,将数值赋值给进度条控件,注意线程操作UI问题。
3、如果无法评估工作进度,那就只能让进度条来回走,等到完成,显示完成就行了。
不过如果是这样的话,使用一张沙漏动态图片可能效果比进度条好些。
第一步,我会,
第二步,我看不懂啊,首先我要操作的文件个数,在一个目录下,能得到,然后对文件进行操作。
按照 逻辑来说的话是 成功一个文件,进度条的值就加一 ,但是我对文件的操作是,填充到data表,然后写入数据库,我不知道,成功一个文件,进度条的值加一,应该写在哪里。如果写在data表处理这里,填充数据库,这里就不能处理到啊。
@萌萌喵星酱、: 这是你自己要处理的事了。
你需要自己确定一个Unit是代表做了多少操作。
比如,填充Data+写入数据库,代表1,这样N个文件就是N,
然后你就可以计算目前完成的百分比了。
要么你就设计一个更复杂的计算方法也行,那就是加权法。
填充Data是一个权重,写入数据库是另外一个权重。
@爱编程的大叔: 我就是不知道填充data+写入数据库,怎么表示为次数,因为写入数据库是一个方法,前面处理的data每次都会使用这个方法写入数据库?
@萌萌喵星酱、: 楼下说的BackgroundWorker是适合你这类初学者的简单方法。
使用方法很简单你自己Google或者试用一下。比像你这样用Thread简单多了。
@爱编程的大叔: 大神 方便留个联系方式么。
BackgroundWorker + ProgressBar
大神看看我给楼上的回复
@萌萌喵星酱、: 网上很多这样的例子,关于进度的计算,大叔说的很清楚了