在Eclipse中,我看到了一个IProgressMonitor的实现 - 后来也在SharpDevelop中,但我不确定它是如何工作的。在其他地方是否有一个例子可能更容易理解?
我想要实现的是通过一个进度条跟踪一堆任务(从20分钟到5秒变化很大)的进度的方法(可以在任何时间点添加任务)。
这样的事情会是一个很好的选择/想法吗?
interface ITask
{
int TotalWork; // ProgressMax
event Progresschanged; // Notifies of the current progress
event ProgressComplete;
}
然后“监视器”只使用观察者模式来监视这两个事件。当所有进度条都完成后,它将隐藏进度条。另一个问题是这些是正在产生的单独线程。
有人能告诉我什么或引导我走上正轨吗?
答案 0 :(得分: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
,以便仅在添加新任务时重新计算它。
是的,通过进行整数除法可能会失去精度。 你也必须连接你自己的活动。
如果您在完成这些任务时遇到问题,请提及,我或其他人可以提供此类课程的完整实施。
答案 1 :(得分:1)
System.Component.BackgroundWorker处理进度通知。我会产生多个BG工作者并让他们在UI线程上向单个方法报告。然后,您可以更新进度条。