首页 新闻 会员 周边

在winform中如何使用进度条?

0
悬赏园豆:20 [待解决问题]

因为对线程和进度条不了解, 所以程序的代码我已经写好了,现在就是不知道怎么增加一个进度条。

程序功能如下,用户选择目录,判断目录下的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();

//需要写对详细表的写入操作
}

c#
萌萌喵星酱、的主页 萌萌喵星酱、 | 初学一级 | 园豆:159
提问于:2016-01-25 10:41
< >
分享
所有回答(3)
-1
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();//这边位重新启动进度条  
        }  
 
Ctrl` | 园豆:3317 (老鸟四级) | 2016-01-25 10:51

这个我看过啊

支持(0) 反对(0) 萌萌喵星酱、 | 园豆:159 (初学一级) | 2016-01-25 11:06
0

代码我就不写了,简单说一下原理。

1、放一个进度条控件这事非常简单,你一定会的,工具箱中找到ProgressBar放进窗体就行。

只是这进度条不会自己工作。

2、把工作完成当成100%,评估每一段工作完成的百分比,将数值赋值给进度条控件,注意线程操作UI问题。

3、如果无法评估工作进度,那就只能让进度条来回走,等到完成,显示完成就行了。

不过如果是这样的话,使用一张沙漏动态图片可能效果比进度条好些。

爱编程的大叔 | 园豆:30839 (高人七级) | 2016-01-25 11:21

 第一步,我会,

第二步,我看不懂啊,首先我要操作的文件个数,在一个目录下,能得到,然后对文件进行操作。

按照 逻辑来说的话是 成功一个文件,进度条的值就加一 ,但是我对文件的操作是,填充到data表,然后写入数据库,我不知道,成功一个文件,进度条的值加一,应该写在哪里。如果写在data表处理这里,填充数据库,这里就不能处理到啊。

支持(0) 反对(0) 萌萌喵星酱、 | 园豆:159 (初学一级) | 2016-01-25 11:34

@萌萌喵星酱、: 这是你自己要处理的事了。

你需要自己确定一个Unit是代表做了多少操作。

比如,填充Data+写入数据库,代表1,这样N个文件就是N,

然后你就可以计算目前完成的百分比了。

 

要么你就设计一个更复杂的计算方法也行,那就是加权法。

填充Data是一个权重,写入数据库是另外一个权重。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2016-01-25 11:39

@爱编程的大叔: 我就是不知道填充data+写入数据库,怎么表示为次数,因为写入数据库是一个方法,前面处理的data每次都会使用这个方法写入数据库?

支持(0) 反对(0) 萌萌喵星酱、 | 园豆:159 (初学一级) | 2016-01-25 11:43

@萌萌喵星酱、: 楼下说的BackgroundWorker是适合你这类初学者的简单方法。

使用方法很简单你自己Google或者试用一下。比像你这样用Thread简单多了。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2016-01-25 11:56

@爱编程的大叔: 大神 方便留个联系方式么。

支持(0) 反对(0) 萌萌喵星酱、 | 园豆:159 (初学一级) | 2016-01-25 12:00
0

BackgroundWorker + ProgressBar

jello chen | 园豆:7336 (大侠五级) | 2016-01-25 11:24

大神看看我给楼上的回复

支持(0) 反对(0) 萌萌喵星酱、 | 园豆:159 (初学一级) | 2016-01-25 11:35

@萌萌喵星酱、: 网上很多这样的例子,关于进度的计算,大叔说的很清楚了

支持(0) 反对(0) jello chen | 园豆:7336 (大侠五级) | 2016-01-25 14:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册