From 28ddc75eadee6c73da2b955e320132fdbecc88de Mon Sep 17 00:00:00 2001
From: C3031 <shitiangui@lanpucloud.cn>
Date: 星期五, 16 一月 2026 16:44:11 +0800
Subject: [PATCH] 修改关闭按钮位置

---
 LB_VisionProcesses/Cameras/LBCameras/LBCamera.cs |  149 ++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 127 insertions(+), 22 deletions(-)

diff --git a/LB_VisionProcesses/Cameras/LBCameras/LBCamera.cs b/LB_VisionProcesses/Cameras/LBCameras/LBCamera.cs
index c03ddab..810ffd3 100644
--- a/LB_VisionProcesses/Cameras/LBCameras/LBCamera.cs
+++ b/LB_VisionProcesses/Cameras/LBCameras/LBCamera.cs
@@ -51,6 +51,8 @@
         // 涓存椂琛岀紦鍐诧紝鐢ㄤ簬鎺ユ敹鍥炶皟鏁版嵁
         private byte[] _tempLineBuffer = null;
         private bool _isContinuous = false;
+        // 鏂板锛欳ollectedImages鎿嶄綔閿侊紝淇濊瘉绾跨▼瀹夊叏
+        private readonly object _collectedImagesLock = new object();
 
         public LBCamera()
         {
@@ -568,37 +570,140 @@
 
                 _frameCount++;
                 AsyncLogHelper.Info($"LBCamera[{SN}]: Frame {_frameCount} generated ({width}x{height})");
-
-                // 寮傛瑙﹀彂浜嬩欢锛岄伩鍏嶉樆濉濻DK鍥炶皟绾跨▼
-                Task.Factory.StartNew(() => 
+                //绌哄�兼牎楠岋細杞崲澶辫触鍒欑洿鎺ヨ繑鍥�
+                if (bmp == null)
                 {
-                    try
+                    AsyncLogHelper.Warn(SN + "甯ц浆鎹负Bitmap澶辫触锛岃烦杩囧鐞�");
+                    return;
+                }
+                // 绾跨▼瀹夊叏鍦板皢Bitmap娣诲姞鍒癈ollectedImages瀛楀吀
+                lock (_collectedImagesLock)
+                {
+                    // 纭繚褰撳墠鐩告満SN瀵瑰簲鐨勫垪琛ㄥ瓨鍦�
+                    if (!CollectedImages.ContainsKey(SN))
                     {
-                        ImageGrabbed?.Invoke(this, new LBCameraEventArgs(SN, bmp, true));
-                        CallBackImg = (Bitmap)bmp.Clone();
-                        if (CallBackImg == null)
-                        {
-                            return;
-                        }
-                        if (GetTriggerMode(out TriggerMode mode, out TriggerSource source))
-                        {
-                            if (mode == TriggerMode.On && source != TriggerSource.Software)
-                                TriggerRunMessageReceived?.Invoke(SN, source.ToString());  // 瑙﹀彂杩愯浜嬩欢
-                        }
-                        bmp.Dispose();
+                        CollectedImages[SN] = new List<Bitmap>();
                     }
-                    catch (Exception ex)
-                    {
-                        AsyncLogHelper.Error($"LBCamera: Event Invoke error - {ex.Message}");
-                        bmp.Dispose(); // 寮傚父鏃堕噴鏀捐祫婧�
-                    }
-                });
+                    CollectedImages[SN].Add(bmp);
+                    AsyncLogHelper.Info(SN + $"鍥惧儚宸插姞鍏ョ紦瀛橈紝褰撳墠缂撳瓨鏁伴噺锛歿CollectedImages[SN].Count}");
+                }
+
+                // 澶勭悊CollectedImages涓殑鍥惧儚锛氶亶鍘嗘秷璐瑰垪琛ㄧ涓�涓厓绱犵洿鍒颁负绌�
+                ProcessCollectedImages();
+                //// 寮傛瑙﹀彂浜嬩欢锛岄伩鍏嶉樆濉濻DK鍥炶皟绾跨▼
+                //Task.Factory.StartNew(() => 
+                //{
+                //    try
+                //    {
+                //        ImageGrabbed?.Invoke(this, new LBCameraEventArgs(SN, bmp, true));
+                //        CallBackImg = (Bitmap)bmp.Clone();
+                //        if (CallBackImg == null)
+                //        {
+                //            return;
+                //        }
+                //        if (GetTriggerMode(out TriggerMode mode, out TriggerSource source))
+                //        {
+                //            if (mode == TriggerMode.On && source != TriggerSource.Software)
+                //                TriggerRunMessageReceived?.Invoke(SN, source.ToString());  // 瑙﹀彂杩愯浜嬩欢
+                //        }
+                //        bmp.Dispose();
+                //    }
+                //    catch (Exception ex)
+                //    {
+                //        AsyncLogHelper.Error($"LBCamera: Event Invoke error - {ex.Message}");
+                //        bmp.Dispose(); // 寮傚父鏃堕噴鏀捐祫婧�
+                //    }
+                //});
             }
             catch (Exception ex)
             {
                 AsyncLogHelper.Error($"LBCamera: CreateBitmap error - {ex.Message}");
             }
         }
+        /// <summary>
+        /// 澶勭悊CollectedImages涓殑缂撳瓨鍥惧儚
+        /// 鏍稿績閫昏緫锛氶亶鍘嗗彇绗竴涓浘鍍� -> 璧嬪�肩粰CallBackImg -> 瑙﹀彂浜嬩欢 -> 閲婃斁骞剁Щ闄�
+        /// </summary>
+        private void ProcessCollectedImages()
+        {
+            Task.Factory.StartNew(() =>
+            {
+                // 鍔犻攣淇濊瘉绾跨▼瀹夊叏锛岄槻姝㈠绾跨▼鍚屾椂鎿嶄綔鍒楄〃
+                lock (_collectedImagesLock)
+                {
+                    // 鏍¢獙褰撳墠鐩告満鐨勫浘鍍忓垪琛ㄦ槸鍚﹀瓨鍦ㄤ笖鏈夋暟鎹�
+                    if (!CollectedImages.ContainsKey(SN) || CollectedImages[SN].Count == 0)
+                    {
+                        AsyncLogHelper.Info(SN + "褰撳墠鏃犵紦瀛樺浘鍍忥紝璺宠繃澶勭悊");
+                        return;
+                    }
+                    // 寰幆澶勭悊锛氱洿鍒板垪琛ㄤ负绌�
+                    while (CollectedImages[SN].Count > 0)
+                    {
+                        try
+                        {
+                            // 1 鍙栧垪琛ㄧ涓�涓储寮曠殑鍥惧儚璧嬪�肩粰CallBackImg
+                            Bitmap firstBitmap = CollectedImages[SN][0];
+                            ImageGrabbed?.Invoke(this, new LBCameraEventArgs(SN, firstBitmap, true));
+                            CallBackImg = (Bitmap)firstBitmap.Clone(); // 鍏嬮殕閬垮厤鍘熷璞¤閲婃斁鍚庡紩鐢ㄥけ鏁�
+
+                            // 2 鑾峰彇瑙﹀彂妯″紡骞跺垽鏂槸鍚﹁Е鍙戣繍琛屼簨浠�
+                            if (GetTriggerMode(out TriggerMode mode, out TriggerSource source))
+                            {
+                                // 纭Е鍙戞ā寮忎笅瑙﹀彂杩愯浜嬩欢
+                                if (mode == TriggerMode.On && source != TriggerSource.Software)
+                                {
+                                    AsyncLogHelper.Info(SN + $"瑙﹀彂纭Е鍙戜簨浠讹紝瑙﹀彂婧愶細{source}");
+                                    TriggerRunMessageReceived?.Invoke(SN, source.ToString());
+                                }
+                            }
+                            else
+                            {
+                                AsyncLogHelper.Warn(SN + "鑾峰彇瑙﹀彂妯″紡澶辫触锛岃烦杩囦簨浠惰Е鍙�");
+                            }
+
+                            // 3 閲婃斁绗竴涓浘鍍忚祫婧愬苟浠庡垪琛ㄧЩ闄�
+                            // 鍏堥噴鏀綛itmap鍐呭瓨锛屽啀绉婚櫎鍒楄〃鍏冪礌
+                            firstBitmap.Dispose();
+                            CollectedImages[SN].RemoveAt(0);
+                            AsyncLogHelper.Info(SN + $"宸叉秷璐圭紦瀛樺浘鍍忥紝鍓╀綑缂撳瓨鏁伴噺锛歿CollectedImages[SN].Count}");
+                        }
+                        catch (Exception ex)
+                        {
+                            AsyncLogHelper.Error(SN + $"澶勭悊缂撳瓨鍥惧儚寮傚父锛歿ex.Message}", ex);
+                            // 鍗曚釜鍥惧儚澶勭悊澶辫触鏃讹紝绉婚櫎璇ュ浘鍍忛伩鍏嶉樆濉炲悗缁鐞�
+                            if (CollectedImages[SN].Count > 0)
+                            {
+                                try
+                                {
+                                    CollectedImages[SN][0]?.Dispose(); // 灏濊瘯閲婃斁
+                                    CollectedImages[SN].RemoveAt(0);
+                                }
+                                catch (Exception innerEx)
+                                {
+                                    AsyncLogHelper.Error(SN + $"娓呯悊寮傚父鍥惧儚澶辫触锛歿innerEx.Message}", innerEx);
+                                }
+                            }
+                            // 鍗曚釜鍥惧儚澶勭悊澶辫触涓嶇粓姝㈠惊鐜紝缁х画澶勭悊涓嬩竴涓�
+                            // 4. 鎵�鏈夊浘鍍忓鐞嗗畬鎴愬悗锛屾竻绌篊allBackImg
+                            if (CallBackImg != null)
+                            {
+                                CallBackImg.Dispose();
+                                CallBackImg = null;
+                            }
+                            continue;
+                        }
+                        // 4. 鎵�鏈夊浘鍍忓鐞嗗畬鎴愬悗锛屾竻绌篊allBackImg
+                        if (CallBackImg != null)
+                        {
+                            CallBackImg.Dispose();
+                            CallBackImg = null;
+                        }
+                    }
+                }
+            });
+        }
+
 
         private void SyncConfigFromCamera()
         {

--
Gitblit v1.9.3