using System; using System.Text; using TechnologyAssembler.Core.Diagnostics; namespace HashCalculator.GUI { internal static class TracerListener { private static readonly object _lock = new(); private static readonly StringBuilder _sb = new(); public static event EventHandler? DataAvailaible; public static void StartListening() { lock (_lock) { if (Tracer.TraceWrite != null) { throw new InvalidOperationException($"{nameof(Tracer.TraceWrite)} already set"); } Tracer.TraceWrite = new TraceWriteDelegate((s, t, m) => { var type = $"{t} ".ToLowerInvariant().Substring(0, 4); WriteLine($"[{s}] {type}: {m}"); }); } } public static void WriteLine(string message) { lock (_lock) { _sb.AppendLine(message); } DataAvailaible?.Invoke(null, EventArgs.Empty); } public static string GetText() { lock (_lock) { var result = _sb.ToString(); _sb.Clear(); return result; } } } }