diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs b/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs index bd40c51..eecde29 100644 --- a/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs +++ b/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs @@ -31,6 +31,11 @@ namespace JoyD.Windows.CS.Toprie // 信息图像,用于显示额外信息 private Image _infoImage = null; + // 最近一次获取到的温度数据 + private TemperatureData _lastTemperatureData = null; + // 用于保护_lastTemperatureData的线程锁 + private readonly object _lastTemperatureDataLock = new object(); + // 用于保护_lastImage的线程锁 private readonly object _lastImageLock = new object(); @@ -63,9 +68,53 @@ namespace JoyD.Windows.CS.Toprie { _deviceManager.ProjectPath = _projectPath; } + } } + } + + /// + /// 获取最近一次接收到的温度数据 + /// + public TemperatureData LastTemperatureData + { + get + { + lock (_lastTemperatureDataLock) + { + return _lastTemperatureData; + } } + } + + /// + /// 设备管理器温度数据接收事件处理 + /// + private void DeviceManager_TemperatureReceived(object sender, DeviceManager.TemperatureReceivedEventArgs e) + { + if (DesignMode) return; + + try + { + // 确保事件参数有效 + if (e == null || e.TemperatureData == null) + { + Console.WriteLine("接收到无效的温度数据事件参数"); + return; + } + + // 更新最近一次温度数据 + lock (_lastTemperatureDataLock) + { + _lastTemperatureData = e.TemperatureData; + } + + Console.WriteLine("温度数据已更新"); } + catch (Exception ex) + { + Console.WriteLine($"处理接收到的温度数据时出错: {ex.Message}"); + } + } // 显示错误的定时器 @@ -340,6 +389,9 @@ namespace JoyD.Windows.CS.Toprie // 注册连接异常事件 _deviceManager.ConnectionException += DeviceManager_ConnectionException; + + // 注册温度数据接收事件 + _deviceManager.TemperatureReceived += DeviceManager_TemperatureReceived; } } @@ -985,6 +1037,13 @@ namespace JoyD.Windows.CS.Toprie } } + // 当TCP连接断开时,将最近一次温度数据实例设为null + lock (_lastTemperatureDataLock) + { + _lastTemperatureData = null; + Console.WriteLine("温度数据实例已清空"); + } + // 设置连接状态后,调用更新Info UpdateInfo(); @@ -1627,6 +1686,13 @@ namespace JoyD.Windows.CS.Toprie _deviceManager.ImageReceived -= DeviceManager_ImageReceived; _deviceManager.ConnectionStatusChanged -= DeviceManager_ConnectionStatusChanged; _deviceManager.ConnectionException -= DeviceManager_ConnectionException; + _deviceManager.TemperatureReceived -= DeviceManager_TemperatureReceived; + + // 释放温度数据资源 + lock (_lastTemperatureDataLock) + { + _lastTemperatureData = null; + } // 释放设备管理器资源 _deviceManager.Dispose(); _deviceManager = null;