修复System.ArgumentException异常:优化Setting.cs中RealTimeImage属性的实现,添加线程安全保护、状态检查和正确的资源管理
This commit is contained in:
@@ -113,8 +113,44 @@ namespace JoyD.Windows.CS
|
||||
}
|
||||
set
|
||||
{
|
||||
mRealTimeImage?.Dispose();
|
||||
// 线程安全检查 - 确保在UI线程上执行
|
||||
if (this.InvokeRequired)
|
||||
{
|
||||
try
|
||||
{
|
||||
this.BeginInvoke(new Action<Image>((img) => RealTimeImage = img), value);
|
||||
}
|
||||
catch (ObjectDisposedException)
|
||||
{
|
||||
// 控件已释放,释放传入的图像
|
||||
value?.Dispose();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// 防止重复设置相同的图像
|
||||
if (mRealTimeImage == value)
|
||||
return;
|
||||
|
||||
// 检查是否在有效状态下操作
|
||||
if (this.IsDisposed || this.Disposing || pictureBoxTemperatureDisplay == null || pictureBoxTemperatureDisplay.IsDisposed)
|
||||
{
|
||||
// 如果窗口已关闭或正在关闭,释放传入的图像
|
||||
value?.Dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
// 释放旧图像
|
||||
if (mRealTimeImage != null && mRealTimeImage != value)
|
||||
{
|
||||
try { mRealTimeImage.Dispose(); } catch { }
|
||||
}
|
||||
|
||||
// 设置新图像
|
||||
mRealTimeImage = value;
|
||||
|
||||
// 立即更新UI
|
||||
UpdatePictureBoxImage();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user