private static void ProgressRequested(BlockingCollection <byte[]> messagesToSend) { var root = CurrentRun?.MST; if (root != null) { WriteMessageToStream(messagesToSend, (writer) => { try { var progress = root.Progress; // make sure there is no error gathering the progress writer.Write((Int32)ToHost.ClientReportedProgress); writer.Write(progress); var reports = Configuration.ProgressReports; if (reports != null) { lock (((ICollection)reports).SyncRoot) { var length = reports.Count; writer.Write(length); int i = 0; for (; i < length; ++i) { IProgressReport report = reports[i]; writer.Write(report.Name); writer.Write(report.GetProgress()); writer.Write(report.Colour.Item1); writer.Write(report.Colour.Item2); writer.Write(report.Colour.Item3); } } } else { writer.Write(0); } } catch { } }); } }