首页 新闻 会员 周边

多线程问题求解

0
悬赏园豆:80 [已解决问题] 解决于 2012-07-24 08:09

我做的一个单线程项目,用的是timer控件,每隔一段时间,读目录的文件,做相应的处理,同时,界面的时间是不停的变化的。现在因为处理的文件多了,界面比较卡。我想用多线程做,现在的问题是不知道怎么下手,我想把处理文件做一个线程,界面的变化做一个线程,但是我界面的变化是和文件的处理息息相关的,哪位大牛可以帮一下?或者推荐一个相似的例子给我也行。

问题补充:

关键是界面的时间,我用多线程时,怎样能让其不停的变化,有相似的例子,我看看最好,

狂想者的主页 狂想者 | 初学一级 | 园豆:14
提问于:2012-07-10 22:31
< >
分享
最佳答案
0

你可以看看我之前写的一个小工具,里面用到了后台线程:http://www.cnblogs.com/artwl/archive/2011/11/15/2249113.html

收获园豆:80
artwl | 专家六级 |园豆:16736 | 2012-07-10 22:32
其他回答(3)
0

涉及到后台线程做事,前台界面需要更新的问题

我用Thread做过,使用Control.Invoke()(同步更新)或者Control.BeginInvoke()去更新界面(异步更新),这个基本可以实现你想实现的任何东西。

也用过backGroundWorker去做,毕竟这个控件是2.0新增的,对后台线程比较简单的封装,这个控件的好处是更新进度条不费事,如果还要更新其他很多东西的话,你得定义参数类来传参。

希望对你有用!

David丶Beckham | 园豆:193 (初学一级) | 2012-07-11 01:19
0

楼上说的应该可行,思想就是,遇到文件处理,就起一个新的线程,处理过程中通过control.invoke()更新界面(之前用control.invokerequired判断一下最好),这样界面就不会卡(死);如果用的是control.begininvoke()则可以将界面更新作为回调函数,这个我没试过

关于backGroundWorker我用过,有个缺陷,就是同一个控件同时只能处理一个事件,否则会提示正在忙,这样的话就需要定义多个控件。

所以干脆直接用thread实现比较好

xiaoyaozhe | 园豆:123 (初学一级) | 2012-07-11 08:38
0

UI本身就是一个线程,使用backGroundWorker另起线程就行。楼上所说的正忙应该不会吧,对同一个backGroundWorker控件,我for循环通过初始化10个实例出来,工作正常。

massinger | 园豆:706 (小虾三级) | 2012-07-11 08:58

这样还是相当于定义了10个backGroundWorker,我说的忙是对于一个backGroundWorker实例来说;当然用程序实例化多个backGroundWorker很方便,如果是拖拽控件的方式就不好了

支持(0) 反对(0) xiaoyaozhe | 园豆:123 (初学一级) | 2012-07-11 09:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册