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