【发布时间】:2013-02-14 19:02:28
【问题描述】:
我有一个耗时的任务,我需要在单独的线程中运行以避免锁定 GUI 线程。随着此任务的进行,它会更新特定的 GUI 控件。
问题是用户可能会在任务结束之前移动到 GUI 的另一部分,在这种情况下,我必须:
- 取消正在进行的任务(如果它处于活动状态)
- 等到它完成取消:这很关键,因为耗时任务的目标是更新特定控件。如果多个线程同时尝试执行此操作,事情可能会变得一团糟。
- 从头开始启动任务
举个具体的例子,假设表单有两个部分:一个用于导航目录树,另一个用于显示缩略图。当用户导航到另一个目录时,缩略图需要刷新。
首先我想使用BackgroundWorker 和AutoResetEvent 来等待取消,但我一定搞砸了,因为取消时我陷入僵局。然后我读到了 TPL,它应该取代 BGW 和更原始的机制。
这可以使用 TPL 轻松完成吗?
【问题讨论】: