From 4592f25364d39ba82e7faf23fbd207aeb2cf54e3 Mon Sep 17 00:00:00 2001 From: zqm Date: Thu, 6 Nov 2025 10:28:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0UI=EF=BC=8C=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E7=AC=AC5=E6=9D=A1=EF=BC=9A=E5=90=8C=E6=AD=A5=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E6=A3=80=E6=B5=8B=E9=85=8D=E7=BD=AE=E7=AA=97=E5=8F=A3?= =?UTF-8?q?=E7=9A=84=E5=AE=9E=E6=97=B6=E5=9B=BE=E5=83=8F=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CS/Framework4.0/Toprie/Toprie/Camera.cs | 16 +++++--- .../CS/Framework4.0/Toprie/Toprie/Setting.cs | 40 +++++++++++++++++++ 2 files changed, 51 insertions(+), 5 deletions(-) diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs b/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs index 4a841f4..1822b0d 100644 --- a/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs +++ b/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs @@ -822,6 +822,15 @@ namespace JoyD.Windows.CS.Toprie // 将全局缓冲一次性绘制到图像框的bitmap imageBox.Image = tempImage; + // 步骤5:同步更新检测配置窗口的实时图像属性 + if (tempImage != null) + { + // 创建图像副本以避免线程安全问题 + Image clonedImage = (Image)tempImage.Clone(); + // 调用Setting窗口的方法更新实时温度图像 + Setting.Form.UpdateRealTimeTemperatureImage(clonedImage); + } + if (lastImage != null) { Console.WriteLine($"图像更新成功: {lastImage.Width}x{lastImage.Height}"); @@ -1708,7 +1717,7 @@ namespace JoyD.Windows.CS.Toprie Console.WriteLine("关闭相机时出错: " + ex.Message); } } - + Setting.Form.Close(); // 取消注册事件并释放设备管理器 if (_deviceManager != null) { @@ -2212,11 +2221,8 @@ namespace JoyD.Windows.CS.Toprie { try { - // 创建并显示检测配置窗口 - Setting settingForm = new Setting(); - // 显示配置窗口 - settingForm.ShowDialog(); + Setting.Form.ShowDialog(); } catch (Exception ex) { diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs index a5ae224..277e01c 100644 --- a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs +++ b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs @@ -59,5 +59,45 @@ namespace JoyD.Windows.CS // 这里可以添加每秒需要执行的代码 // 例如:更新界面数据、检查状态等 } + + /// + /// 同步更新实时温度图像 + /// + /// 要显示的图像 + public void UpdateRealTimeTemperatureImage(Image image) + { + if (DesignMode || this.IsDisposed || this.Disposing) + return; + + // 线程安全检查 - 确保在UI线程上执行 + if (this.InvokeRequired) + { + try + { + this.BeginInvoke(new Action(UpdateRealTimeTemperatureImage), image); + } + catch (ObjectDisposedException) + { + // 控件已释放,忽略 + } + return; + } + + // 安全更新图像 + if (pictureBoxTemperatureDisplay != null && !pictureBoxTemperatureDisplay.IsDisposed) + { + // 保存旧图像引用,以便设置新图像后释放 + Image oldImage = pictureBoxTemperatureDisplay.Image; + + // 设置新图像 + pictureBoxTemperatureDisplay.Image = image; + + // 释放旧图像 + if (oldImage != null && oldImage != image) + { + try { oldImage.Dispose(); } catch { } + } + } + } } }