在过去的几个月里,我一直在努力想出一些干净的代码来向用户报告进度.一切似乎总是归结为:
ReportProgress("Starting Task 1"); doTask1(); ReportProgress("Task 1 is done"); ReportProgress("Starting Task 2"); doTask2(); ReportProgress("Task 2 is done"); //etc... where report progress does some form of output to the user.
我这个优秀的程序员尖叫着"必须有一个更清洁的方式!" 但我很难过.有什么想法吗?
编辑::我正在寻找更多有关架构信息的信息,而不是特定于实现的信息.给出的代码非常简单.
将您的任务设置为事件流,并使事件处理"引擎"报告进度.如果您想要走得那么远,每个事件实例都可以有自己的名称,进度报告模糊/模板等
如果这是一种经常发生的模式,那么基础设施的努力是值得的.完成后,可用的代码可能如下所示:
EventQueue tasks = new EventQueue(); tasks.Add(new TaskEvent(this.doTask1,"Foo-ing the bar")); tasks.Add(new TaskEvent(this.doTask2,"Bar-ing the foo")); tasks.Add(new TaskEvent(this.doTask3,"Glitching and whinging")); ... tasks.Execute(this.ProgressEventHandler);