2

在 Eclipse 中,我看到了 IProgressMonitor 的实现——它随后也在 SharpDevelop 中,但我不确定它是如何工作的。其他地方有没有这样的例子可能更容易理解?

我想要实现的是一种通过一个进度条跟踪一堆任务(从 20 分钟到 5 秒变化很大)进度的方法(可以在任何时间点添加任务)。

这样的事情会是一个很好的选择/想法吗?

interface ITask
{
    int TotalWork; // ProgressMax
    event Progresschanged; // Notifies of the current progress
    event ProgressComplete;
}

然后“监视器”简单地使用观察者模式来监视这两个事件。当所有进度条完成后,它将隐藏进度条。另一个问题是这些是正在产生的单独线程。

任何人都可以就某事给我建议或带领我走上正确的道路吗?

4

2 回答 2

2

维护一份任务清单,并根据它们的整体贡献来衡量它们;

struct Task { int work, progress  }
class OverallProgress
{
    List<Task> tasks;
    int Work { get { return tasks.Sum(t=>t.work; } }
    int Progress { get { return tasks.Sum(t=>t.progress/t.work); } }
    void AddTask(Task t) { tasks.Add(t); }
}

这个实现只是为了说明这个概念

是的,这个实现效率不高。您可以存储计算Work结果,以便仅在添加新任务时重新计算它。

是的,您可能会因进行整数除法而失去精度。你也必须连接你自己的事件。

如果您对这些任务有疑问,请提及,我或其他人可以提供此类的完整实现。

于 2009-06-25T16:05:06.237 回答
1

System.Component.BackgroundWorker 处理进度通知。我会生成多个 BG 工作人员,并让他们向 UI 线程上的单个方法报告。然后,您可以更新进度条。

于 2009-03-30T18:38:34.667 回答