HashCalculator.GUI/TracerListener.cs
2022-01-25 13:35:00 +01:00

50 lines
1.3 KiB
C#

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;
}
}
}
}