涉及到后台线程做事,前台界面需要更新的问题
我用Thread做过,使用Control.Invoke()(同步更新)或者Control.BeginInvoke()去更新界面(异步更新),这个基本可以实现你想实现的任何东西。
也用过backGroundWorker去做,毕竟这个控件是2.0新增的,对后台线程比较简单的封装,这个控件的好处是更新进度条不费事,如果还要更新其他很多东西的话,你得定义参数类来传参。
希望对你有用!
楼上说的应该可行,思想就是,遇到文件处理,就起一个新的线程,处理过程中通过control.invoke()更新界面(之前用control.invokerequired判断一下最好),这样界面就不会卡(死);如果用的是control.begininvoke()则可以将界面更新作为回调函数,这个我没试过
关于backGroundWorker我用过,有个缺陷,就是同一个控件同时只能处理一个事件,否则会提示正在忙,这样的话就需要定义多个控件。
所以干脆直接用thread实现比较好
UI本身就是一个线程,使用backGroundWorker另起线程就行。楼上所说的正忙应该不会吧,对同一个backGroundWorker控件,我for循环通过初始化10个实例出来,工作正常。
这样还是相当于定义了10个backGroundWorker,我说的忙是对于一个backGroundWorker实例来说;当然用程序实例化多个backGroundWorker很方便,如果是拖拽控件的方式就不好了