【发布时间】:2009-08-25 01:44:37
【问题描述】:
我的任务是开发一个下载排队系统,但我有点不知道从哪里开始。
本质上,我们需要做的是拥有一个下载管理器之类的东西(但不是那么完善)。我们有大约 20-100 个文件要下载,我们为用户提供了一个 UI(带有列表视图)以允许他们暂停、停止或移动优先级的作业。
我对要使用的数据结构感到困惑,优先队列似乎是我研究的一种方式,但我对如何使其发挥作用感到困惑。我是否有一个后台线程可以窥视队列并选择下一个任务并继续执行?在下载文件时,我也需要提供进度 - 它们非常大,有时 120Mb(但它是本地的,所以不超过 10 分钟)。
有时他们需要暂停一项工作,并将一项工作推到队列中更高的位置,因为它被认为是紧急的。
它不是下载管理器,所以没有限制等问题。人们怎么写这样的东西?
我正在考虑有一个像 IDownloadTask 这样的接口,它描述要执行的任务,有一些属性和一个事件来公开它的进度(当任务运行时会连接起来)。
然后将该IDownloadTask 放入优先级队列中。后台工作人员将其拾取(我猜 PriorityQUeue 需要同步),然后在单独的线程上执行接口实现中的 .Execute() 方法。
这听起来合理吗?有没有人可以在某处向我展示的具体示例?
编辑
哇,感谢您的回复和信任投票,我应该提一下我正在使用 .NET 2.0(由于 Windows 9x 的 Windows 兼容性要求,我们不能再提高了)。
【问题讨论】:
-
你的思路是正确的。
-
我认为将这个问题分解成更容易回答的较小部分(和单独的问题)可能是个好主意。这种系统的设计是一个多页文档。
标签: c# data-structures multithreading queue cpu