修复相同SN相机重新创建后引用失效导致无法采集的问题
1. 修复引用更新逻辑:修改`CameraConfig.Run` 方法,将仅对比SN字符串改为对比全局 `dicCameras`中的对象实例,解决相机删除重建(SN不变)后流程仍调用已销毁旧对象的问题。
2. 增强健壮性:在检测到相机实例变更后,增加自动检查并调用 `StartGrabbing()`的逻辑,确保新相机能自动进入采集状态,防止报“相机未打开”错误。
| | |
| | | return Result; |
| | | } |
| | | |
| | | if (Camera == null || Camera.SN != SN) |
| | | { |
| | | // 始终检查缓存的Camera对象是否与全局字典中的一致 |
| | | // 防止相机被删除并重建后(SN相同), 仍然引用旧的已销毁对象 |
| | | if (dicCameras.ContainsKey(SN)) |
| | | Camera = dicCameras[SN]; |
| | | { |
| | | var currentCam = dicCameras[SN]; |
| | | if (Camera != currentCam) |
| | | { |
| | | Camera = currentCam; |
| | | // 如果切换了相机实例,且未开始采集,尝试开启采集 |
| | | if (Camera != null && !Camera.isGrabbing) |
| | | { |
| | | try { Camera.StartGrabbing(); } catch { } |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | Camera = null; |
| | | } |
| | | |