C#3.0核心技术-第19章线程-全新翻译注释-19.12(2)
2010-05-23 20:31
225 查看
19.12.1 子类化BackgroundWorker
BackgroundWorker不是密封的,并且提供了一个虚的OnDoWork方法,暗示了使用它的另一种模式。在写一个潜在的长时间运行的方法中,你可以写一个返回子类化BackgroundWorker的额外版本,预先配置好以并发地执行这个工作。消费者(译者注:即调用者)然后只需要处理RunWorkerCompleted和ProgressChanged事件。例如,假定我们写了一个耗费事件的方法,叫做GetFinancialTotals:
我们可以像下面一样重构它:
代码视图:
任何调用GetFinancialTotalsBackground的人然后得到一个FinancialWorker:一个具有真实世界可用性的管理后台运行的包装类。它能够报告进度,能够被撤销,与WPF和Windows Form应用程序友好(译者注:即无需在线程之间封装和传送数据)。它也具有异常处理的特性,并且它使用一个标准的协议(译者注:来处理异常)(与任何其他人使用的BackgroundWorker相同!)。
以这种方式子类化BackgroundWorker带来了实现基于事件的异步模式的好处,但是以一种更精简的方式和更少的工作量。
BackgroundWorker不是密封的,并且提供了一个虚的OnDoWork方法,暗示了使用它的另一种模式。在写一个潜在的长时间运行的方法中,你可以写一个返回子类化BackgroundWorker的额外版本,预先配置好以并发地执行这个工作。消费者(译者注:即调用者)然后只需要处理RunWorkerCompleted和ProgressChanged事件。例如,假定我们写了一个耗费事件的方法,叫做GetFinancialTotals:
我们可以像下面一样重构它:
代码视图:
任何调用GetFinancialTotalsBackground的人然后得到一个FinancialWorker:一个具有真实世界可用性的管理后台运行的包装类。它能够报告进度,能够被撤销,与WPF和Windows Form应用程序友好(译者注:即无需在线程之间封装和传送数据)。它也具有异常处理的特性,并且它使用一个标准的协议(译者注:来处理异常)(与任何其他人使用的BackgroundWorker相同!)。
以这种方式子类化BackgroundWorker带来了实现基于事件的异步模式的好处,但是以一种更精简的方式和更少的工作量。
相关文章推荐
- C#3.0核心技术-第19章线程-全新翻译注释-19.13(1)
- C#3.0核心技术-第19章线程-全新翻译注释-19.7(1)
- C#3.0核心技术-第19章线程-全新翻译注释-19.13(2)
- C#3.0核心技术-第19章线程-全新翻译注释-19.10(2)
- C#3.0核心技术-第19章线程-全新翻译注释-19.2(7)
- C#3.0核心技术-第19章线程-全新翻译注释-19.10(3)
- C#3.0核心技术-第19章线程-全新翻译注释-19.3
- C#3.0核心技术-第19章线程-全新翻译注释-19.1
- C#3.0核心技术-第19章线程-全新翻译注释-19.2(1)
- C#3.0核心技术-第19章线程-全新翻译注释-19.9(1)
- C#3.0核心技术-第19章线程-全新翻译注释-19.2(3)
- C#3.0核心技术-第19章线程-全新翻译注释-19.5(2)
- C#3.0核心技术-第19章线程-全新翻译注释-19.2(4)
- C#3.0核心技术-第19章线程-全新翻译注释-19.6(1)
- C#3.0核心技术-第19章线程-全新翻译注释-19.9(6)
- C#3.0核心技术-第19章线程-全新翻译注释-19.2(5)
- C#3.0核心技术-第19章线程-全新翻译注释-19.10(1)
- C#3.0核心技术-第19章线程-全新翻译注释-19.2(6)
- C#3.0核心技术-第19章线程-全新翻译注释-19.7(2)
- C#3.0核心技术-第19章线程-全新翻译注释-19.13(3)