规范并补充日志内容

This commit is contained in:
2026-01-16 14:30:42 +08:00
parent 4e0bb33ce2
commit fd6a82eb4e
28 changed files with 325 additions and 537 deletions

View File

@@ -1,4 +1,6 @@
using OpenCvSharp;
using Ayay.SerilogLogs;
using OpenCvSharp;
using Serilog;
namespace SHH.CameraSdk
{
@@ -17,6 +19,9 @@ namespace SHH.CameraSdk
public class DisplayWindowManager : IDisposable
{
#region --- ---
private static ILogger _sysLog = Log.ForContext("SourceContext", LogModules.Core);
/// <summary>
/// 单个窗口的上下文信息载体
/// 存储设备关联、运行状态、回调函数等核心数据
@@ -64,7 +69,7 @@ namespace SHH.CameraSdk
_cameraManager = cameraManager;
// 启动长驻UI线程设置 LongRunning 提升调度优先级
_uiThread = Task.Factory.StartNew(UILoop, TaskCreationOptions.LongRunning);
Console.WriteLine("[DisplayManager] 渲染引擎就绪 (防僵尸窗口终极版)");
_sysLog.Information("[DisplayManager] 渲染引擎就绪 (防僵尸窗口终极版)");
}
/// <summary>
@@ -77,7 +82,7 @@ namespace SHH.CameraSdk
// 2. 等待 UI 线程退出最多等待1秒防止卡死
try { _uiThread.Wait(1000); }
catch (Exception ex) { Console.WriteLine($"[DisplayManager] 线程退出异常: {ex.Message}"); }
catch (Exception ex) { _sysLog.Error($"[DisplayManager] 线程退出异常: {ex.Message}"); }
// 3. 强制清理所有活跃窗口
foreach (var appId in _activeWindows.Keys)
@@ -95,7 +100,7 @@ namespace SHH.CameraSdk
_uiActionQueue.Dispose();
_cts.Dispose();
Console.WriteLine("[DisplayManager] 渲染引擎已安全销毁");
_sysLog.Information("[DisplayManager] 渲染引擎已安全销毁");
}
#endregion
@@ -110,7 +115,7 @@ namespace SHH.CameraSdk
// 防重入:已存在该窗口则直接返回
if (_activeWindows.ContainsKey(appId)) return;
Console.WriteLine($"[DisplayManager] 正在启动窗口: {appId} -> Device {deviceId}");
_sysLog.Information($"[DisplayManager] 正在启动窗口: {appId} -> Device {deviceId}");
// 初始化窗口上下文
var context = new WindowContext
@@ -126,7 +131,7 @@ namespace SHH.CameraSdk
if (mouseEvent == MouseEventTypes.LButtonDown)
{
context.IsPaused = !context.IsPaused;
Console.WriteLine($"[DisplayManager] 窗口 {appId} 状态切换: {(context.IsPaused ? "" : "")}");
_sysLog.Information($"[DisplayManager] 窗口 {appId} 状态切换: {(context.IsPaused ? "" : "")}");
}
};
@@ -148,7 +153,7 @@ namespace SHH.CameraSdk
}
catch (Exception ex)
{
Console.WriteLine($"[DisplayManager] 窗口 {appId} 初始化失败: {ex.Message}");
_sysLog.Error($"[DisplayManager] 窗口 {appId} 初始化失败: {ex.Message}");
}
});
@@ -179,7 +184,7 @@ namespace SHH.CameraSdk
}
catch (Exception ex)
{
Console.WriteLine($"[DisplayManager] 帧克隆失败: {ex.Message}");
_sysLog.Error($"[DisplayManager] 帧克隆失败: {ex.Message}");
return;
}
@@ -223,7 +228,7 @@ namespace SHH.CameraSdk
// 从注册表中移除窗口上下文
if (_activeWindows.TryRemove(appId, out var context))
{
Console.WriteLine($"[DisplayManager] 正在清理窗口资源: {appId}");
_sysLog.Information($"[DisplayManager] 正在清理窗口资源: {appId}");
// 步骤1立即取消帧数据流订阅
GlobalStreamDispatcher.Unsubscribe(appId);
@@ -237,7 +242,7 @@ namespace SHH.CameraSdk
}
catch (Exception ex)
{
Console.WriteLine($"[DisplayManager] 窗口 {appId} 销毁失败: {ex.Message}");
_sysLog.Error($"[DisplayManager] 窗口 {appId} 销毁失败: {ex.Message}");
}
});
@@ -257,7 +262,7 @@ namespace SHH.CameraSdk
if (_activeWindows.TryGetValue(appId, out var ctx))
{
ctx.IsPaused = true;
Console.WriteLine($"[DisplayManager] 窗口 {appId} 已暂停");
_sysLog.Information($"[DisplayManager] 窗口 {appId} 已暂停");
}
}
@@ -270,7 +275,7 @@ namespace SHH.CameraSdk
if (_activeWindows.TryGetValue(appId, out var ctx))
{
ctx.IsPaused = false;
Console.WriteLine($"[DisplayManager] 窗口 {appId} 已恢复");
_sysLog.Information($"[DisplayManager] 窗口 {appId} 已恢复");
}
}
#endregion
@@ -290,7 +295,7 @@ namespace SHH.CameraSdk
var device = _cameraManager.GetDevice(deviceId);
if (device == null)
{
Console.WriteLine($"[策略联动] 设备 {deviceId} 不存在");
_sysLog.Information($"[策略联动] 设备 {deviceId} 不存在");
return;
}
@@ -298,7 +303,7 @@ namespace SHH.CameraSdk
var frameController = device.Controller;
if (frameController == null)
{
Console.WriteLine($"[策略联动] 设备 {deviceId} 未配置帧控制器");
_sysLog.Information($"[策略联动] 设备 {deviceId} 未配置帧控制器");
return;
}
@@ -306,12 +311,12 @@ namespace SHH.CameraSdk
if (fps > 0)
{
frameController.Register(appId, fps);
Console.WriteLine($"[策略联动] ✅ 已注册流控: {appId} -> {fps} FPS");
_sysLog.Information($"[策略联动] ✅ 已注册流控: {appId} -> {fps} FPS");
}
else
{
frameController.Unregister(appId);
Console.WriteLine($"[策略联动] 🗑️ 已注销流控: {appId}");
_sysLog.Information($"[策略联动] 🗑️ 已注销流控: {appId}");
}
// 记录审计日志,用于前端排查问题
@@ -319,7 +324,7 @@ namespace SHH.CameraSdk
}
catch (Exception ex)
{
Console.WriteLine($"[策略联动] ❌ 联动失败: {ex.Message}");
_sysLog.Error($"[策略联动] ❌ 联动失败: {ex.Message}");
}
}
#endregion
@@ -360,7 +365,7 @@ namespace SHH.CameraSdk
}
catch (Exception ex)
{
Console.WriteLine($"[UI] 渲染循环异常: {ex.Message}");
_sysLog.Error($"[UI] 渲染循环异常: {ex.Message}");
}
}
@@ -385,7 +390,7 @@ namespace SHH.CameraSdk
// Visible < 1.0 表示窗口已被用户手动关闭
if (Cv2.GetWindowProperty(appId, WindowPropertyFlags.Visible) < 1.0)
{
Console.WriteLine($"[UI] 检测到窗口 {appId} 已被手动关闭,触发清理...");
_sysLog.Information($"[UI] 检测到窗口 {appId} 已被手动关闭,触发清理...");
// 异步清理:避免 StopDisplay 内部的队列操作阻塞 UI 线程
Task.Run(() => StopDisplay(appId));
}