单线程在完成一个冗长任务时会让界面停止绘画.异步调用则产生多个线程来完成任务,却有机会更新界面.
在.NET1.1中,使用多线程是很麻烦的事情,你要声明委托,实现函数,进行异步调用,在回调函数中了解工作状态.代码下载:
这很麻烦,实际上我们使用多线程,就是为了1.完成一个异步的任务,2.在界面上显示进度的任务,3.用户可以取消任务.既然如此,为什么要这么麻烦呢?在.NET2.0中就有一个组件,可以完成类似的任务了!而且,有人实现了1.1的组件,它的名字就是BackgroundWorker.它使用起来非常简单,组件公开了三个事件,可以完成执行任务,显示进度,取消任务.拥有两个属性.
this.m_BackgroundWorker.WorkerReportsProgress = false;
this.m_BackgroundWorker.WorkerSupportsCancellation = true;
this.m_BackgroundWorker.DoWork += new ThreadHelper.DoWorkEventHandler(this.OnDoWork);
this.m_BackgroundWorker.RunWorkerCompleted += new ThreadHelper.RunWorkerCompletedEventHandler(this.OnCompleted);
这个组件和.NET2.0的一样!用法都相同.这就方便执行行后台线程了!
1.1的组件包含在 IssueVision中.下载
2.0的在System.ComponentModel.命名空间(也是BackgroundWorker名称都一样). 2.0例子请下载
链接:
Creating a better BackgroundWorker: CancelImmediately and other goodies