using Check.Main.Common; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Check.Main.Result { /// /// 代表一个待检测产品的类,存储来自多个相机的图像 /// public class ProductResult { /// /// 产品唯一ID,可以是时间戳或触发计数 /// public long ProductID { get; } /// /// 存储每个相机名称和其拍摄到的图像 /// public Dictionary CapturedImages { get; } public ProductResult(long productID) { ProductID = productID; CapturedImages = new Dictionary(); } /// /// 添加一张某个相机拍摄的图像 /// /// 相机名称 /// 拍摄的图像 public void AddImage(string cameraName, Bitmap image) { if (!CapturedImages.ContainsKey(cameraName)) { CapturedImages.Add(cameraName, image); } else { // 如果这个键已经存在,说明发生了逻辑错误。 // 我们不应该持有这个新的 image 对象,必须释放它以防泄漏。 ThreadSafeLogger.Log($"[警告] 相机 {cameraName} 为产品 #{this.ProductID} 发送了重复的图像。多余的图像将被丢弃。"); image?.Dispose(); } } /// /// 检查是否所有预期的相机都已完成拍摄 /// /// 预期的相机数量 /// public bool IsComplete(int expectedCameraCount) { return CapturedImages.Count == expectedCameraCount; } /// /// 释放所有图像资源,防止内存泄漏 /// public void Dispose() { foreach (var image in CapturedImages.Values) { image?.Dispose(); } CapturedImages.Clear(); } } }