From 8a3ab64a65da226636743be07c4bee63f50da25d Mon Sep 17 00:00:00 2001 From: patrick.xu <patrick.xu@broconcentric.com> Date: 星期六, 06 三月 2021 11:35:20 +0800 Subject: [PATCH] 1. 解决软件异常崩溃问题 --- src/Bro.Common.Device/DeviceBase/CameraBase.cs | 79 ++++++++++++++++++++------------------- 1 files changed, 40 insertions(+), 39 deletions(-) diff --git a/src/Bro.Common.Device/DeviceBase/CameraBase.cs b/src/Bro.Common.Device/DeviceBase/CameraBase.cs index 42d1be2..d96dc0d 100644 --- a/src/Bro.Common.Device/DeviceBase/CameraBase.cs +++ b/src/Bro.Common.Device/DeviceBase/CameraBase.cs @@ -153,9 +153,9 @@ set.IsOriginSaved = !set.ImageSaveOption.IsSaveOriginImage; set.IsFitSaved = !set.ImageSaveOption.IsSaveFitImage; set.IsAddtionalSaved = string.IsNullOrWhiteSpace(set.ImageSaveOption.AddtionalSaveType); - set.OnImageSetTimeout += ImageSet_OnImageSetTimeout; + //set.OnImageSetTimeout += ImageSet_OnImageSetTimeout; - _imageSetList.Add(set); + _imageSetList[set.Id] = set; } /// <summary> @@ -175,15 +175,16 @@ #endregion #region 鍥剧墖缂撳瓨/淇濆瓨 - public readonly ConcurrentBag<IImageSet> _imageSetList = new ConcurrentBag<IImageSet>(); + //public readonly ConcurrentBag<IImageSet> _imageSetList = new ConcurrentBag<IImageSet>(); + protected Dictionary<string, IImageSet> _imageSetList = new Dictionary<string, IImageSet>(); public void NewImageSet(IImageSet set) { set.IsOriginSaved = !set.ImageSaveOption.IsSaveOriginImage; set.IsFitSaved = !set.ImageSaveOption.IsSaveFitImage; set.IsAddtionalSaved = string.IsNullOrWhiteSpace(set.ImageSaveOption.AddtionalSaveType); - set.OnImageSetTimeout += ImageSet_OnImageSetTimeout; - _imageSetList.Add(set); + //set.OnImageSetTimeout += ImageSet_OnImageSetTimeout; + _imageSetList[set.Id] = set; } //public virtual async void UpdateFitElements(List<IShapeElement> eleList, string imgSetId) @@ -201,7 +202,7 @@ OnImageUpdated?.Invoke(this, showImage, imgSetId); }); - IImageSet set = _imageSetList.FirstOrDefault(u => u.Id == imgSetId); + IImageSet set = _imageSetList[imgSetId]; if (set == null) return; @@ -236,7 +237,7 @@ if (eleList.Count > 0) OnElementsUpdated?.BeginInvoke(this, eleList, imgSetId, null, null); - IImageSet set = _imageSetList.FirstOrDefault(u => u.Id == imgSetId); + IImageSet set = _imageSetList[imgSetId]; if (set == null) return; @@ -300,7 +301,7 @@ { await Task.Run(() => { - IImageSet set = _imageSetList.FirstOrDefault(u => u.Id == imgSetId); + IImageSet set = _imageSetList[imgSetId]; if (set == null) return; @@ -366,7 +367,7 @@ //private Timer clearImageSetTimer = null; - public void ClearImageSet(IImageSet set) + public virtual void ClearImageSet(IImageSet set) { try { @@ -375,9 +376,10 @@ // && (!set.ImageSaveOption.IsSaveNGImage || set.IsNGSaved)) if (set.IsOriginSaved && set.IsFitSaved && set.IsAddtionalSaved) { - _imageSetList.TryTake(out set); set.Dispose(); - //LogAsync(DateTime.Now, $"绉婚櫎鍥剧墖淇℃伅锛屽綋鍓嶇紦瀛樻暟閲忥細{_imageSetList.Count}", ""); + + _imageSetList.Remove(set.Id); + LogAsync(DateTime.Now, $"绉婚櫎鍥剧墖淇℃伅锛屽綋鍓嶇紦瀛樻暟閲忥細{_imageSetList.Count}", ""); } //bool flag = false; @@ -395,17 +397,17 @@ } } - public void ClearImageSet(string imgSetId) - { - IImageSet set = _imageSetList.First(u => u.Id == imgSetId); - if (set != null) - ClearImageSet(set); - } + //public void ClearImageSet(string imgSetId) + //{ + // IImageSet set = _imageSetList[imgSetId]; + // if (set != null) + // ClearImageSet(set); + //} - private void ImageSet_OnImageSetTimeout(ImageSet set) - { - ClearImageSet(set); - } + //private void ImageSet_OnImageSetTimeout(ImageSet set) + //{ + // ClearImageSet(set); + //} //private void ClearImageSetPeriodically() //{ @@ -543,7 +545,7 @@ { await Task.Run(() => { - Thread.Sleep(1000); + //Thread.Sleep(1000); int widthIn4 = (int)Math.Ceiling(width / 4.0) * 4; Bitmap bmp = new Bitmap(widthIn4, height, PixelFormat.Format48bppRgb); @@ -833,7 +835,7 @@ } } - public interface IImageSet : IDisposable + public interface IImageSet:IDisposable { DateTime InitialTime { get; set; } string Id { get; } @@ -847,7 +849,7 @@ bool IsFitSaved { get; set; } bool IsAddtionalSaved { get; set; } - event Action<ImageSet> OnImageSetTimeout; + //event Action<ImageSet> OnImageSetTimeout; /// <summary> /// 搴忓垪鍖栨搷浣滅殑鍥惧儚淇℃伅 @@ -894,29 +896,28 @@ public virtual string ImageData { get; set; } - public event Action<ImageSet> OnImageSetTimeout; - private Timer autoDisposeTimer = null; + //public event Action<ImageSet> OnImageSetTimeout; + //private Timer autoDisposeTimer = null; - private void OnAutoDispose(object state) + public void Dispose(object state) { - OnImageSetTimeout?.Invoke(this); - } + //OnImageSetTimeout?.Invoke(this); - public ImageSet() - { - autoDisposeTimer = new Timer(OnAutoDispose, null, 10 * 1000, -1); + //autoDisposeTimer.Change(-1, -1); + //autoDisposeTimer.Dispose(); + + Image?.Dispose(); + Image = null; } public virtual void Dispose() { - autoDisposeTimer.Change(-1, -1); - autoDisposeTimer.Dispose(); + Dispose(null); + } - Image?.Dispose(); - Image = null; - - HImage?.Dispose(); - HImage = null; + public ImageSet() + { + //autoDisposeTimer = new Timer(Dispose, null, 10 * 1000, -1); } #endregion } -- Gitblit v1.8.0