【发布时间】:2010-10-06 14:41:13
【问题描述】:
我有一个程序使用线程顺序执行耗时的过程。我希望能够像BackgroundWorker.ReportProgress/ProgressChanged 模型那样监控每个线程的进度。由于受到其他限制,我无法使用ThreadPool 或BackgroundWorker。允许/公开此功能的最佳方式是什么。重载Thread 类并添加属性/事件?另一个更优雅的解决方案?
【问题讨论】:
-
你是如何创建线程的?
-
@ Steve Townsend - 我有一个可以预先创建它们的工厂和一个控制它们何时运行的状态机。
-
有什么限制?你可以创建一个类来包装一个线程并使用这个类吗?这是主动对象模式。
-
@Ray Henry - 感谢您的设计模式名称,我仍在学习/对他们不熟悉。限制是我需要能够确保某些线程同时运行并且某些线程按顺序运行(相对于其他线程),具体取决于它们的任务类型和提供的附加信息(本质上是线程矩阵)。我认为包装类是我最好的选择,但也许几个只允许单个工作项的 BackgoundWorkers 也是一种选择。
-
为每个要同时运行的线程使用不同的 BackgroundWorker。将单个 BackgroundWorker 用于您要按顺序运行的作业。实际上,在 WorkCompleted 处理程序中,您可以设置要运行的下一个 BackgroundWorker。此外,如果您使用的是 .NET 4,请查看 System.Threading.Tasks 命名空间。
标签: c# multithreading backgroundworker threadpool