From 2d87a89484e3e92cf61dc5fc77ab2ade5424590e Mon Sep 17 00:00:00 2001 From: zqm Date: Thu, 6 Nov 2025 11:23:23 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=BC=BA=E5=9B=BE=E5=83=8F=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86=EF=BC=9A=E5=9C=A8?= =?UTF-8?q?UpdatePictureBoxImage=E6=96=B9=E6=B3=95=E4=B8=AD=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=A4=9A=E5=B1=82=E5=BC=82=E5=B8=B8=E6=8D=95=E8=8E=B7?= =?UTF-8?q?=E6=9C=BA=E5=88=B6=EF=BC=8C=E5=8C=85=E6=8B=AC=E6=8E=A7=E4=BB=B6?= =?UTF-8?q?=E6=9C=89=E6=95=88=E6=80=A7=E5=8F=8C=E9=87=8D=E6=A3=80=E6=9F=A5?= =?UTF-8?q?=E3=80=81=E5=9B=BE=E5=83=8F=E8=AE=BE=E7=BD=AE=E8=BF=87=E7=A8=8B?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86=E5=92=8C=E5=A4=96=E5=B1=82?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E6=8D=95=E8=8E=B7=EF=BC=8C=E9=98=B2=E6=AD=A2?= =?UTF-8?q?=E5=9C=A8=E7=AA=97=E5=8F=A3=E9=A2=91=E7=B9=81=E6=89=93=E5=BC=80?= =?UTF-8?q?=E5=85=B3=E9=97=AD=E6=97=B6=E5=87=BA=E7=8E=B0System.ArgumentExc?= =?UTF-8?q?eption=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CS/Framework4.0/Toprie/Toprie/Setting.cs | 68 ++++++++++++------- 1 file changed, 45 insertions(+), 23 deletions(-) diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs index 68b0ff7..3d243c4 100644 --- a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs +++ b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs @@ -89,35 +89,57 @@ namespace JoyD.Windows.CS // 安全更新图像 if (pictureBoxTemperatureDisplay != null && !pictureBoxTemperatureDisplay.IsDisposed) { - // 保存旧图像引用,以便设置新图像后释放 - Image oldImage = pictureBoxTemperatureDisplay.Image; - - // 检查mRealTimeImage是否有效 - 只设置有效的图像 - Image imageToSet = null; try { - // 验证图像是否有效(尝试访问图像属性,如果无效会抛出异常) - if (mRealTimeImage != null) + // 保存旧图像引用,以便设置新图像后释放 + Image oldImage = pictureBoxTemperatureDisplay.Image; + + // 检查mRealTimeImage是否有效 - 只设置有效的图像 + Image imageToSet = null; + try { - // 尝试访问Width属性来验证图像是否有效 - var width = mRealTimeImage.Width; - // 如果没有抛出异常,则图像有效 - imageToSet = mRealTimeImage; + // 验证图像是否有效(尝试访问图像属性,如果无效会抛出异常) + if (mRealTimeImage != null) + { + // 尝试访问Width属性来验证图像是否有效 + var width = mRealTimeImage.Width; + // 如果没有抛出异常,则图像有效 + imageToSet = mRealTimeImage; + } + } + catch (Exception) + { + // 图像无效,不设置它 + // 可以选择记录日志或创建一个默认的错误图像 + } + + // 再次检查控件是否仍然有效,防止在验证过程中控件被释放 + if (pictureBoxTemperatureDisplay != null && !pictureBoxTemperatureDisplay.IsDisposed) + { + // 设置图像(如果有效) + try + { + pictureBoxTemperatureDisplay.Image = imageToSet; + } + catch (Exception ex) + { + // 捕获设置图像时可能发生的异常 + System.Diagnostics.Debug.WriteLine($"设置PictureBox图像失败: {ex.Message}"); + // 确保设置为null而不是无效图像 + pictureBoxTemperatureDisplay.Image = null; + } + } + + // 释放旧图像(如果不是当前设置的图像) + if (oldImage != null && oldImage != imageToSet) + { + try { oldImage.Dispose(); } catch { } } } - catch (Exception) + catch (Exception ex) { - // 图像无效,不设置它 - // 可以选择记录日志或创建一个默认的错误图像 - } - - // 设置图像(如果有效) - pictureBoxTemperatureDisplay.Image = imageToSet; - - // 释放旧图像(如果不是当前设置的图像) - if (oldImage != null && oldImage != imageToSet) - { - try { oldImage.Dispose(); } catch { } + // 捕获所有其他异常,确保方法不会崩溃 + System.Diagnostics.Debug.WriteLine($"UpdatePictureBoxImage异常: {ex.Message}"); } } }