namespace anjianjingling.Common
{
///
/// 线程安全日志总线:后台线程产生日志,UI 线程定时消费。
///
public sealed class LogBus
{
private readonly Queue _queue = new();
private readonly object _lock = new();
public event Action? OnLog;
public void Write(string message)
{
var line = $"[{DateTime.Now:HH:mm:ss}] {message}";
lock (_lock)
{
_queue.Enqueue(line);
if (_queue.Count > 2000)
{
// 防止异常情况下无限增长
while (_queue.Count > 1000) _queue.Dequeue();
}
}
OnLog?.Invoke(line);
}
/// 取出当前所有缓冲日志(UI 定时器调用)。
public List Drain()
{
lock (_lock)
{
var list = new List(_queue.Count);
while (_queue.Count > 0) list.Add(_queue.Dequeue());
return list;
}
}
}
}