using Bro.Common.Interface; using Bro.Common.UI; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; namespace Bro.Common.Base.UI { public partial class CtrlCameraRunBase : UserControl, IRunCtrl { public CtrlCameraRunBase() { InitializeComponent(); } public IDevice Device { get; set; } protected CameraBase Camera { get => Device as CameraBase; } public CtrlCameraRunBase(IDevice device) { InitializeComponent(); Device = device; Camera.OnImageUpdated += Camera_UpdateShowImage; Camera.OnElementsUpdated += Camera_OnElementsUpdated; } private readonly Dictionary> _eleBufferDict = new Dictionary>(); private volatile string _setId = ""; protected virtual void Camera_OnElementsUpdated(CameraBase camera, List eleList, string setId) { if (cvImage.IsHandleCreated) { if (_setId == setId) { eleList.ForEach(e => cvImage.Elements.Add(e)); } else { _eleBufferDict[setId] = eleList; } } } protected virtual void Camera_UpdateShowImage(CameraBase camera, Bitmap image, string setId) { _setId = setId; if (cvImage.IsHandleCreated) { cvImage.LoadImage(image); if (_eleBufferDict.ContainsKey(setId)) { _eleBufferDict[setId].ForEach(e => cvImage.Elements.Add(e)); _eleBufferDict.Remove(setId); } } } /// /// 清理所有正在使用的资源。 /// /// 如果应释放托管资源,为 true;否则为 false。 protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } } }