diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs b/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs
index f62bea4..88dcce1 100644
--- a/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs
+++ b/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs
@@ -83,6 +83,10 @@ namespace JoyD.Windows.CS.Toprie
// 是否暂停检测
private bool _isPaused = false;
+ ///
+ /// 首次ping通设备并更新信息
+ ///
+ private volatile bool _isFirst = true;
// 项目路径,用于数据文件的存取
private string _projectPath = "";
@@ -560,11 +564,30 @@ namespace JoyD.Windows.CS.Toprie
{
try
{
- StartCamera();
+ // 启动设备Ping
+ StartDevicePing();
+ // 延迟启动相机,避免界面卡顿
+ ThreadPool.QueueUserWorkItem(delegate
+ {
+ while(!IsDevicePingable)
+ Thread.Sleep(3000); // 延迟3秒后启动
+ _isFirst = false;
+ this.Invoke(new Action(() =>
+ {
+ try
+ {
+ StartCamera();
+ }
+ catch (Exception ex)
+ {
+ ShowError($"自动启动相机失败: {ex.Message}");
+ }
+ }));
+ });
}
catch (Exception ex)
{
- ShowError($"自动启动相机失败: {ex.Message}");
+ ShowError($"启动相机失败: {ex.Message}");
}
}
}
@@ -694,8 +717,6 @@ namespace JoyD.Windows.CS.Toprie
///
public void StartCamera()
{
- // 启动设备Ping
- StartDevicePing();
if (DesignMode) return;
try
{
@@ -949,7 +970,6 @@ namespace JoyD.Windows.CS.Toprie
}
catch (ObjectDisposedException)
{
- Console.WriteLine("控件已释放,跳过UI更新");
}
return;
}
@@ -963,7 +983,7 @@ namespace JoyD.Windows.CS.Toprie
// 调用温度显示更新方法
// 在就绪条件下,调用更新实时信息
- bool isReady = !_isPaused && IsDevicePingable && _deviceManager != null && _deviceManager.ConnectionStatus == ConnectionStatus.Connected;
+ bool isReady = _deviceManager != null && (_isFirst || (!_isPaused && IsDevicePingable && _deviceManager.ConnectionStatus == ConnectionStatus.Connected));
if (isReady)
{
UpdateRealTimeInfoOnUI();
@@ -979,11 +999,9 @@ namespace JoyD.Windows.CS.Toprie
// 检查图像缓冲区是否有效
if (_imageBuffer == null)
{
- Console.WriteLine("图像缓冲区未初始化,尝试重新初始化");
InitializeImageBuffer();
if (_imageBuffer == null)
{
- Console.WriteLine("重新初始化图像缓冲区失败");
return;
}
}
@@ -991,12 +1009,17 @@ namespace JoyD.Windows.CS.Toprie
// 保存旧图像引用,以便在设置新图像后释放
oldImage = imageBox.Image;
- // 获取当前的LastImage引用
- lock (_lastImageLock)
+ if (!_isFirst)
{
- if (_lastImage != null)
+ // 获取当前的LastImage引用
+ lock (_lastImageLock)
{
- lastImage = (Image)_lastImage.Clone();
+ if (_lastImage == null)
+ {
+ return;
+ }
+ // 直接使用_lastImage引用,避免创建不必要的副本
+ lastImage = _lastImage;
}
}
@@ -1005,7 +1028,8 @@ namespace JoyD.Windows.CS.Toprie
{
if (_infoImage != null)
{
- infoImage = (Image)_infoImage.Clone();
+ // 直接使用_infoImage引用,避免创建不必要的副本
+ infoImage = _infoImage;
}
}
@@ -1090,7 +1114,6 @@ namespace JoyD.Windows.CS.Toprie
{
// 特别处理"参数无效"异常
Console.WriteLine($"图像参数无效异常: {ex.Message}");
-
// 尝试设置旧图像回来,不需要再次检查控件状态(已在方法开始处检查)
if (oldImage != null)
{
@@ -1146,25 +1169,15 @@ namespace JoyD.Windows.CS.Toprie
return;
}
- Console.WriteLine($"[{DateTime.Now:HH:mm:ss.fff}] [线程:{Thread.CurrentThread.ManagedThreadId}] 接收连接状态变更事件: {e.Status}");
-
// 捕获所有可能的异常,确保事件处理器不会崩溃
try
{
// 首先检查控件状态
if (this.IsDisposed || this.Disposing)
{
- Console.WriteLine($"[{DateTime.Now:HH:mm:ss.fff}] 控件已释放或正在释放,跳过UI更新");
return;
}
- // 检查事件参数中的状态信息
- string statusMessage = $"连接状态变更为: {e.Status}";
- if (!string.IsNullOrEmpty(e.DeviceInfo))
- {
- statusMessage += $" (设备信息: {e.DeviceInfo})";
- }
-
// 线程安全处理 - 确保在UI线程上更新
if (this.InvokeRequired)
{
@@ -1178,10 +1191,6 @@ namespace JoyD.Windows.CS.Toprie
{
HandleConnectionStatusChanged(args);
}
- else
- {
- Console.WriteLine($"[{DateTime.Now:HH:mm:ss.fff}] 异步调用期间控件已释放,跳过处理");
- }
}), e);
}
catch (ObjectDisposedException ode)
@@ -1220,7 +1229,7 @@ namespace JoyD.Windows.CS.Toprie
// 确保在UI线程上更新UI
if (this.InvokeRequired)
{
- this.Invoke(new Action(HandleConnectionStatusChanged), e);
+ this.BeginInvoke(new Action(HandleConnectionStatusChanged), e);
return;
}
@@ -1230,14 +1239,9 @@ namespace JoyD.Windows.CS.Toprie
// 检查_deviceManager是否为空
if (_deviceManager == null)
{
- Console.WriteLine("设备管理器未初始化");
- WriteLog("设备管理器未初始化");
return;
}
- // 记录连接状态变化
- WriteLog($"连接状态变化: {e.Status} {(!string.IsNullOrEmpty(e.DeviceInfo) ? "- " + e.DeviceInfo : "")}");
-
switch (e.Status)
{
case ConnectionStatus.Connected:
@@ -1869,7 +1873,7 @@ namespace JoyD.Windows.CS.Toprie
// 在线程安全的方式下更新状态
if (this.InvokeRequired)
{
- this.Invoke(new Action(UpdatePingState), pingResult);
+ this.BeginInvoke(new Action(UpdatePingState), pingResult);
}
else
{
diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Properties/AssemblyInfo.cs b/Windows/CS/Framework4.0/Toprie/Toprie/Properties/AssemblyInfo.cs
index e2074b7..853ae9e 100644
--- a/Windows/CS/Framework4.0/Toprie/Toprie/Properties/AssemblyInfo.cs
+++ b/Windows/CS/Framework4.0/Toprie/Toprie/Properties/AssemblyInfo.cs
@@ -32,7 +32,7 @@ using System.Runtime.InteropServices;
// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.3")]
-[assembly: AssemblyFileVersion("1.0.0.7")]
+[assembly: AssemblyVersion("1.0.1.0")]
+[assembly: AssemblyFileVersion("1.0.1.0")]
// NuGet包相关信息已在项目文件中配置