现在的位置: 首页 > 综合 > 正文

续 Winform中线程Timer类的使用(关于backgroundWorker类的使用)

2013年10月02日 ⁄ 综合 ⁄ 共 662字 ⁄ 字号 评论关闭

      上一篇文章(Winform中线程类的Timer使用),发现其中有不少错误和不合理的地方。在上文中用到了System.Threading.Timer,这个定时器可以按照你指定的时间间隔来执行一个方法。我当时是用这个定时器来监控一个状态变量,一旦该状态变量改变了则执行线程 t 的销毁工作。但是后来想想总感觉这样做不太好,太被动。而且当时显示进度条的方法里面是一个while(true)的死循环,从而引发了这样一个问题,当线程开始执行这个死循环后就出不来了!即便后台的复制工作已经完成,也没法跳转出来,直到抛异常。

      今天重新想了一下,改了一下定时器的用处,并且加入了.NET2.0里面新添加的backgroundWorker类。现在定时器用来没隔800毫秒就执行一次显示进度条的方法,而backgroundWorker类则用来处理数据的复制工作。

      该类有三个事件:

      DoWork                            调用RunWorkAsync()方法时会触发该事件

      ProgressChanged              调用ReportProgress()方法会触发该事件

      RunWorkerCompleted       DoWork得到返回值时会触发该事件

      用定时器来执行进度条的显示,就没必要再用死循环了,每次只执行一次,在RunWorkerCompleted事件里,销毁定时器。这样基本也可以实现在复制数据的同时,基本实时的显示进度条。

      具体代码如图:

复制数据时显示进度条的代码

抱歉!评论已关闭.