first commit
This commit is contained in:
commit
761b95080f
404 files changed
+312608
No files matched your search
@@ -0,0 +1,39 @@
|
||||
namespace anjianjingling.Common
|
||||
{
|
||||
/// <summary>
|
||||
/// 线程安全日志总线:后台线程产生日志,UI 线程定时消费。
|
||||
/// </summary>
|
||||
public sealed class LogBus
|
||||
{
|
||||
private readonly Queue<string> _queue = new();
|
||||
private readonly object _lock = new();
|
||||
|
||||
public event Action<string>? 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);
|
||||
}
|
||||
|
||||
/// <summary>取出当前所有缓冲日志(UI 定时器调用)。</summary>
|
||||
public List<string> Drain()
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
var list = new List<string>(_queue.Count);
|
||||
while (_queue.Count > 0) list.Add(_queue.Dequeue());
|
||||
return list;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user