添加日志记录功能,在关键位置记录设备状态和温度数据

This commit is contained in:
zqm
2025-11-05 15:15:30 +08:00
parent d51f378433
commit da7df26930

View File

@@ -44,6 +44,9 @@ namespace JoyD.Windows.CS.Toprie
private bool _showAverageTemperature = false; // 是否显示平均温度
private bool _showMinTemperature = false; // 是否显示最低温度
// 日志保存状态标志
private bool _saveLogEnabled = false; // 是否启用日志保存
// 用于保护_lastImage的线程锁
private readonly object _lastImageLock = new object();
@@ -536,16 +539,20 @@ namespace JoyD.Windows.CS.Toprie
if (!_isReceivingImage && _deviceManager.ConnectionStatus == ConnectionStatus.Connected)
{
Console.WriteLine("Camera开始使用HTTP方式接收图像");
// 记录日志
WriteLog("开始使用HTTP方式接收图像");
// 直接调用HTTP方式的图像接收
_deviceManager.StartImageReceiving();
// 不再需要温度数据实时通知机制,移除相关代码
_isReceivingImage = true;
WriteLog("图像接收已启动");
}
}
catch (Exception ex)
{
ShowError($"开始接收图像失败: {ex.Message}");
WriteLog($"开始接收图像失败: {ex.Message}");
}
}
@@ -961,13 +968,18 @@ namespace JoyD.Windows.CS.Toprie
if (_deviceManager == null)
{
Console.WriteLine("设备管理器未初始化");
WriteLog("设备管理器未初始化");
return;
}
// 记录连接状态变化
WriteLog($"连接状态变化: {e.Status} {(!string.IsNullOrEmpty(e.DeviceInfo) ? "- " + e.DeviceInfo : "")}");
switch (e.Status)
{
case ConnectionStatus.Connected:
Console.WriteLine("设备已连接");
WriteLog("设备已连接成功");
// 仅在首次连接时设置为热图模式,重连时保留之前的模式
if (!_isReceivingImage) // 首次连接时_isReceivingImage为false
@@ -976,15 +988,18 @@ namespace JoyD.Windows.CS.Toprie
{
_deviceManager.SetImageMode(ImageMode.Infrared);
Console.WriteLine("首次连接,设置热图模式");
WriteLog("首次连接,设置热图模式");
}
catch (Exception ex)
{
Console.WriteLine($"设置热图模式失败: {ex.Message}");
WriteLog($"设置热图模式失败: {ex.Message}");
}
}
else
{
Console.WriteLine("重连成功,保留当前图像模式");
WriteLog("重连成功,保留当前图像模式");
}
// 注意色彩模式同步现在在DeviceManager内部的连接成功处理中自动完成
@@ -1000,6 +1015,7 @@ namespace JoyD.Windows.CS.Toprie
catch (Exception ex)
{
Console.WriteLine($"开始接收图像失败: {ex.Message}");
WriteLog($"开始接收图像失败: {ex.Message}");
}
}
@@ -1011,6 +1027,7 @@ namespace JoyD.Windows.CS.Toprie
break;
case ConnectionStatus.Disconnected:
Console.WriteLine("设备已断开连接");
WriteLog("设备连接已断开");
// 停止接收图像(添加空检查和异常处理)
if (_isReceivingImage)
@@ -1023,6 +1040,7 @@ namespace JoyD.Windows.CS.Toprie
catch (Exception ex)
{
Console.WriteLine($"停止接收图像失败: {ex.Message}");
WriteLog($"停止接收图像失败: {ex.Message}");
_isReceivingImage = false; // 确保状态更新
}
}
@@ -1038,18 +1056,22 @@ namespace JoyD.Windows.CS.Toprie
if (!string.IsNullOrEmpty(e.DeviceInfo))
{
ShowError(e.DeviceInfo);
WriteLog($"断开原因: {e.DeviceInfo}");
}
else
{
ShowError("设备连接已断开");
WriteLog("设备连接已断开");
}
break;
case ConnectionStatus.Connecting:
Console.WriteLine($"正在连接设备...{(!string.IsNullOrEmpty(e.DeviceInfo) ? " " + e.DeviceInfo : "")}");
WriteLog($"正在连接设备...{(!string.IsNullOrEmpty(e.DeviceInfo) ? " " + e.DeviceInfo : "")}");
ShowError(string.Empty); // 清除之前的错误信息
break;
case ConnectionStatus.Reconnecting:
Console.WriteLine($"正在重新连接设备...{(!string.IsNullOrEmpty(e.DeviceInfo) ? " " + e.DeviceInfo : "")}");
WriteLog($"正在重新连接设备...{(!string.IsNullOrEmpty(e.DeviceInfo) ? " " + e.DeviceInfo : "")}");
ShowError(string.Empty); // 清除之前的错误信息
// 按照README中要求的修改流程第2点和第6点连接状态变化时只在非暂停状态下调用更新Info
@@ -1881,6 +1903,63 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 保存日志菜单项点击事件处理
/// </summary>
private void SaveLogToolStripMenuItem_Click(object sender, EventArgs e)
{
// 更新日志保存状态标志
_saveLogEnabled = saveLogToolStripMenuItem.Checked;
// 可以在这里添加日志记录的初始化或清理逻辑
if (_saveLogEnabled)
{
// 日志启用时的初始化
WriteLog("日志保存功能已启用");
}
else
{
// 日志禁用时的清理(如果需要)
WriteLog("日志保存功能已禁用");
}
}
/// <summary>
/// 写入日志信息到文件
/// 只有在_saveLogEnabled为true时才会保存
/// </summary>
/// <param name="logMessage">日志消息</param>
private void WriteLog(string logMessage)
{
// 只有当日志保存功能启用时才执行写入
if (_saveLogEnabled)
{
try
{
// 确保项目路径存在
if (!string.IsNullOrEmpty(_projectPath) && Directory.Exists(_projectPath))
{
// 创建Logs目录如果不存在
string logDir = Path.Combine(_projectPath, "Logs");
Directory.CreateDirectory(logDir);
// 生成日志文件名(按日期)
string logFileName = $"Log_{DateTime.Now:yyyyMMdd}.txt";
string logFilePath = Path.Combine(logDir, logFileName);
// 写入日志(带时间戳)
string logEntry = $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}] {logMessage}";
File.AppendAllText(logFilePath, logEntry + Environment.NewLine);
}
}
catch (Exception ex)
{
// 记录日志写入失败的异常(但不抛出,以免影响主程序)
Console.WriteLine($"写入日志失败: {ex.Message}");
}
}
}
/// <summary>
/// 更新实时信息显示
/// 实现温度数据及其他实时信息的显示功能
@@ -1946,6 +2025,13 @@ namespace JoyD.Windows.CS.Toprie
temperatureTexts.Add($"最高: {temperatureData.MaxTemperature:F2} °C");
}
// 记录温度数据日志
if (temperatureTexts.Count > 0)
{
string mode = isGlobalTemperatureMode ? "全局温度" : "区域温度";
WriteLog($"{mode}数据 - 平均: {temperatureData.AverageTemperature:F2} °C, 最低: {temperatureData.MinTemperature:F2} °C, 最高: {temperatureData.MaxTemperature:F2} °C");
}
// 如果没有要显示的温度文本,直接返回
if (temperatureTexts.Count == 0)
return;