1 2 3 4 5 6 7 8 9 10 下一页 概述 在应用程序中,可能会遇到一些执行耗时的功能操作,比如数据下载、复杂计算及数据库事务等,一般这样的功能会在单独的线程上实现,避免出现用户界面长时间无响应情况。在.net 2.0中,FCL提供了BackgroundWorker组件来方便的实现这些功能要求,该组件在功能上的确很吸引人。本文将实现一个增强的BackgroundWorker组件,支持基于事件的多任务异步操作。 功能介绍 BackgroundWorker 组件采用基于事件的异步模式简化了多线程操作编程,不过其不能对多个异步任务生命期进行管理,因此开发人员可能会通过使用多个 BackgroundWorker实例来应对异步操作密集的情况。MultiBackgroundWorker组件解决多任务的问题,使得单个实例对多个异步任务的生命期进行集中管理,对于每个任务同样提供异步任务操作请求,异步任务执行进度汇报以及异步任务结束通知。 异步任务操作请求。MultiBackgroundWorker组件提供了RunWorkerAsync方法来开始一个异步操作的请求,该方法需要一个参数来唯一标识新的异步任务,如果任务执行过程中需要用到相关信息数据可以通过第二个参数传入。 public virtualvoid RunWorkerAsync(object taskId, object argument); 在RunWorkerAsync方法调用后,MultiBackgroundWorker会生成一个新的异步任务,并对其生命周期进行管理,同时触发DoWork 事件。 public event MultiDoWorkEventHandler DoWork; 在事件处理程序中通过MultiDoWorkEventArgs对象获取参数信息和任务标识。类似于BackgroundWorker 组件,调用程序注册DoWork 事件并在该事件处理程序中编写异步处理逻辑代码。DoWork事件处理程序执行的线程不同于调用RunWorkerAsync 方法的线程,因此,调用线程是UI线程时,在DoWork 事件处理程序中就不能编写访问UI元素的代码,而实际在编写WinForm应用程序时调用线程基本上UI线程,值得注意。 (责任编辑:admin) |