修复代码问题:1. 移除Camera.cs中重复定义的_isPaused变量 2. 优化TemperatureData.cs中的变量声明 3. 修复DeviceManager.cs中温度数据只接收一次的问题
This commit is contained in:
@@ -45,6 +45,9 @@ namespace JoyD.Windows.CS.Toprie
|
||||
// 是否显示信息图像
|
||||
private bool _isDisplayingInfo = false;
|
||||
|
||||
// 是否暂停检测
|
||||
private bool _isPaused = false;
|
||||
|
||||
// 项目路径,用于数据文件的存取
|
||||
private string _projectPath = "";
|
||||
|
||||
@@ -645,7 +648,6 @@ namespace JoyD.Windows.CS.Toprie
|
||||
}
|
||||
}
|
||||
|
||||
private bool _isPaused = false; // 暂停状态标志
|
||||
// 记录上次启动温度数据接收的时间,用于防止短时间内重复调用
|
||||
private DateTime _lastTemperatureStartCall = DateTime.MinValue;
|
||||
private readonly object _temperatureCallLock = new object();
|
||||
|
||||
@@ -1120,6 +1120,8 @@ namespace JoyD.Windows.CS.Toprie
|
||||
{
|
||||
_temperatureTcpClient = localTcpClient;
|
||||
_temperatureStream = localStream;
|
||||
// 确保接收状态为true
|
||||
_isReceivingTemperatureData = true;
|
||||
}
|
||||
|
||||
// 发送开始温度数据传输的命令
|
||||
@@ -1129,34 +1131,35 @@ namespace JoyD.Windows.CS.Toprie
|
||||
|
||||
Log("已发送开始温度数据传输命令,开始接收温度数据");
|
||||
|
||||
// 使用局部变量引用停止事件,避免在循环中重复加锁
|
||||
ManualResetEvent currentStopEvent = null;
|
||||
lock (_lockObject)
|
||||
{
|
||||
currentStopEvent = _stopTemperatureEvent;
|
||||
}
|
||||
|
||||
// 循环读取数据,使用更安全的退出机制
|
||||
bool shouldContinue = true;
|
||||
while (shouldContinue)
|
||||
{
|
||||
// 检查停止信号
|
||||
if (currentStopEvent != null && currentStopEvent.WaitOne(0))
|
||||
// 检查停止信号和接收状态
|
||||
bool stopRequested = false;
|
||||
bool isReceiving = true;
|
||||
|
||||
lock (_lockObject)
|
||||
{
|
||||
if (_stopTemperatureEvent != null && _stopTemperatureEvent.WaitOne(0))
|
||||
{
|
||||
stopRequested = true;
|
||||
}
|
||||
isReceiving = _isReceivingTemperatureData;
|
||||
}
|
||||
|
||||
if (stopRequested)
|
||||
{
|
||||
Log("接收到停止信号,准备退出温度数据接收循环");
|
||||
shouldContinue = false;
|
||||
break;
|
||||
}
|
||||
|
||||
// 检查是否仍在接收状态
|
||||
lock (_lockObject)
|
||||
if (!isReceiving)
|
||||
{
|
||||
if (!_isReceivingTemperatureData)
|
||||
{
|
||||
Log("接收状态已更改,准备退出温度数据接收循环");
|
||||
shouldContinue = false;
|
||||
break;
|
||||
}
|
||||
Log("接收状态已更改(isReceiving=false),准备退出温度数据接收循环");
|
||||
shouldContinue = false;
|
||||
break;
|
||||
}
|
||||
|
||||
try
|
||||
@@ -1188,6 +1191,8 @@ namespace JoyD.Windows.CS.Toprie
|
||||
byte[] receivedBytes = new byte[bytesRead];
|
||||
Array.Copy(buffer, receivedBytes, bytesRead);
|
||||
|
||||
Log($"接收到温度数据字节数: {bytesRead}");
|
||||
|
||||
// 线程安全地更新累积器或直接处理
|
||||
lock (temperatureDataAccumulator)
|
||||
{
|
||||
@@ -1280,27 +1285,39 @@ namespace JoyD.Windows.CS.Toprie
|
||||
|
||||
try
|
||||
{
|
||||
Log($"开始处理温度数据,当前累积数据量: {dataAccumulator.Count} 字节,所需帧大小: {TEMPERATURE_DATA_FRAME_SIZE} 字节");
|
||||
|
||||
// 检查是否有足够的数据构成完整的温度数据帧
|
||||
while (dataAccumulator.Count >= TEMPERATURE_DATA_FRAME_SIZE)
|
||||
{
|
||||
Log($"找到完整的温度数据帧,开始处理");
|
||||
|
||||
// 提取一帧温度数据
|
||||
byte[] temperatureFrame = dataAccumulator.GetRange(0, TEMPERATURE_DATA_FRAME_SIZE).ToArray();
|
||||
dataAccumulator.RemoveRange(0, TEMPERATURE_DATA_FRAME_SIZE);
|
||||
|
||||
Log($"提取温度数据帧完成,剩余累积数据量: {dataAccumulator.Count} 字节");
|
||||
|
||||
// 获取温度补偿值
|
||||
float compensationValue = GetTemperatureCompensationValue();
|
||||
Log($"获取到温度补偿值: {compensationValue}");
|
||||
|
||||
// 创建温度数据对象,使用正确的分辨率参数
|
||||
TemperatureData temperatureData = new TemperatureData(temperatureFrame, WIDTH, HEIGHT, compensationValue);
|
||||
Log($"温度数据对象创建成功,分辨率: {WIDTH}x{HEIGHT}");
|
||||
|
||||
// 触发温度数据接收事件
|
||||
OnTemperatureReceived(new TemperatureReceivedEventArgs(temperatureData, temperatureFrame, compensationValue));
|
||||
Log($"温度数据接收事件触发完成");
|
||||
}
|
||||
|
||||
Log($"温度数据处理完成");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log($"[{DateTime.Now:HH:mm:ss.fff}] [线程:{Thread.CurrentThread.ManagedThreadId}] ProcessReceivedTemperatureData() - 异常: {ex.Message}");
|
||||
// 清空累积器,重新开始
|
||||
Log("清空温度数据累积器,准备重新接收");
|
||||
dataAccumulator.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -394,8 +394,7 @@ namespace JoyD.Windows.CS.Toprie
|
||||
};
|
||||
|
||||
// 如果匹配标准分辨率,安全地返回对应值
|
||||
int[] resolution;
|
||||
if (standardResolutions.TryGetValue(pixelCount, out resolution))
|
||||
if (standardResolutions.TryGetValue(pixelCount, out int[] resolution))
|
||||
{
|
||||
return resolution;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user