规范并补充日志内容
This commit is contained in:
@@ -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));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user