using System; using System.Diagnostics.CodeAnalysis; using System.Threading; using TechnologyAssembler.Core.Diagnostics; namespace HashCalculator.GUI { internal static class TracerListener { private static Action? _onData = null; [SuppressMessage("Globalization", "CA1308:将字符串规范化为大写", Justification = "<挂起>")] [SuppressMessage("Globalization", "CA1303:请不要将文本作为本地化参数传递", Justification = "<挂起>")] public static void StartListening(Action action) { var original = Interlocked.CompareExchange(ref _onData, action, null); if(original != null) { throw new InvalidOperationException("Action 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) { Interlocked.CompareExchange(ref _onData, null, null)?.Invoke($"{message}\r\n"); } } }