private void PrintProgressLine(ILogWriter writer, ProgressReporting.ProgressEvent ev)
            {
                // Elapsed time.
                var elapsed = ev.EventTime - ev.StartTime;

                if (elapsed.TotalMinutes < 1)
                {
                    writer.Write(string.Format("(00:{0:00.00})", elapsed.TotalSeconds));
                }
                else if (elapsed.TotalHours < 1)
                {
                    writer.Write(string.Format("({0:00}:{1:00.0})", elapsed.Minutes, elapsed.TotalSeconds - 60 * elapsed.Minutes));
                }
                else
                {
                    writer.Write(string.Format("({0:00}:{1:00}:{2:00})", elapsed.Hours, elapsed.Minutes, elapsed.Seconds));
                }

                // Progress units.
                bool first = true;

                for (int i = 0; i < ev.ProgressEntry.Header.UnitNames.Count; i++)
                {
                    if (ev.ProgressEntry.Progress[i] == null)
                    {
                        continue;
                    }
                    writer.Write(first ? "\t" : ", ");
                    first = false;
                    writer.Write(string.Format("{0}", ev.ProgressEntry.Progress[i]));
                    if (ev.ProgressEntry.ProgressLim[i] != null)
                    {
                        writer.Write(string.Format("/{0}", ev.ProgressEntry.ProgressLim[i].Value));
                    }
                    writer.Write(string.Format(" {0}", ev.ProgressEntry.Header.UnitNames[i]));
                }

                // Metrics.
                for (int i = 0; i < ev.ProgressEntry.Header.MetricNames.Count; i++)
                {
                    if (ev.ProgressEntry.Metrics[i] == null)
                    {
                        continue;
                    }
                    writer.Write(string.Format("\t{0}: {1}", ev.ProgressEntry.Header.MetricNames[i], ev.ProgressEntry.Metrics[i].Value));
                }

                writer.WriteLine(string.Empty);
            }
 private static void PrintOperationStop(ILogWriter writer, ProgressReporting.ProgressEvent ev)
 {
     writer.WriteLine(string.Format("[{0}] '{1}' finished in {2}.", ev.Index, ev.Name, ev.EventTime - ev.StartTime));
 }
 private static void PrintOperationStart(ILogWriter writer, ProgressReporting.ProgressEvent ev)
 {
     writer.WriteLine(string.Format("[{0}] '{1}' started.", ev.Index, ev.Name));
 }