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