From eafdcc5ad6a55d3dfdec6c4787c3f3a9f32efc7f Mon Sep 17 00:00:00 2001 From: xcd <834800634@qq.com> Date: 星期二, 29 九月 2020 13:27:50 +0800 Subject: [PATCH] 1. M071B机台配置 2. GTS板卡添加回原点捕获模式和输入信号模式 3. CameraBase使用Dictionary类型做图片缓存 4. M071流程显式Copy,原来是为了避免内存泄漏,但目前来看不是这方面原因 5. Gocator驱动添加GoDataSet之类KObject资源显式回收,怀疑其中也有非托管对象资源,测试确实起到内存回收作用 --- src/Bro.M071.Process/M071Models.cs | 78 +++++++++++++++++++++++++++++++++++++-- 1 files changed, 74 insertions(+), 4 deletions(-) diff --git a/src/Bro.M071.Process/M071Models.cs b/src/Bro.M071.Process/M071Models.cs index 5ccaad2..2e9b2db 100644 --- a/src/Bro.M071.Process/M071Models.cs +++ b/src/Bro.M071.Process/M071Models.cs @@ -17,6 +17,28 @@ namespace Bro.M071.Process { + public class KeyLocation : IComplexDisplay + { + [Category("閿悕閰嶇疆")] + [Description("鍗曢敭閿悕")] + [TypeConverter(typeof(KeyNameDictConverter))] + public string Key { get; set; } + + [Category("浣嶇疆閰嶇疆")] + [Description("鍗曢敭鍦ㄩ敭鐩樺钩闈㈠浘涓婄殑浣嶇疆鏄剧ず")] + public Rectangle KeyRect { get; set; } = new Rectangle(); + + [Category("浣嶇疆閰嶇疆")] + [Description("鍗曢敭涔嬪悗闂撮殭浣嶇疆")] + public Rectangle IntervalRect { get; set; } = new Rectangle(); + + public string GetDisplayText() + { + return $"{Key}:{KeyRect.X},{KeyRect.Y},{KeyRect.Width},{KeyRect.Height}"; + } + } + + public class KeyAlgorithem : IComplexDisplay { [Browsable(false)] @@ -235,7 +257,7 @@ { Measurements?.ForEach(m => m?.Dispose()); Measurements = null; - + ElementList = null; Barcode = null; GC.Collect(); } @@ -282,7 +304,7 @@ #region 鏄剧ず [Browsable(false)] - public Rectangle DisplayLocation { get; set; } = new Rectangle(); + public Rectangle DisplayLocation { get; set; } = new Rectangle(10, 10, 100, 100); #endregion #region 妫�娴嬬粨鏋� @@ -319,6 +341,39 @@ private void K_PropertyChanged(object sender, PropertyChangedEventArgs e) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("KeyUnitCollection")); + } + + public MeasurementUnit Copy() + { + MeasurementUnit mUnit = new MeasurementUnit(); + + mUnit.Id = this.Id; + mUnit.Name = this.Name; + mUnit.IsEnabled = this.IsEnabled; + mUnit.MeasureType = this.MeasureType; + + mUnit.DisplayLocation = new Rectangle(this.DisplayLocation.Location, this.DisplayLocation.Size); + + if (this.Spec == null) + { + mUnit.Spec = null; + } + else + { + mUnit.Spec = new MeasureType(); + mUnit.Spec.Code = this.Spec.Code; + mUnit.Spec.AlgorithemPath = this.Spec.AlgorithemPath; + mUnit.Spec.StandardValue = this.Spec.StandardValue; + mUnit.Spec.Tolrenance_Positive = this.Spec.Tolrenance_Positive; + mUnit.Spec.Tolrenance_Negative = this.Spec.Tolrenance_Negative; + } + + this.KeyUnitCollection.ForEach(k => + { + mUnit.KeyUnitCollection.Add(k.Copy()); + }); + + return mUnit; } } @@ -369,10 +424,9 @@ public void Dispose() { - SpinWait wait = new SpinWait(); while (ImageSaveStatus != 0) { - wait.SpinOnce(); + Thread.Sleep(10); } KeyImages?.ForEach(i => @@ -392,6 +446,8 @@ if (valuePairs == null || valuePairs.Count == 0) { IsDone = false; + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("IsDone")); + return; } foreach (KeyValuePair<string, double> pair in valuePairs) @@ -413,6 +469,20 @@ } } } + + public KeyUnitBind Copy() + { + KeyUnitBind clone = new KeyUnitBind(); + clone.Key = this.Key; + clone.KeyResultId = this.KeyResultId; + + this.MeasureValueDict.Keys.ToList().ForEach(k => + { + clone.MeasureValueDict[k] = null; + }); + + return clone; + } } //public class NoticedDictionary<T1, T2> : Dictionary<T1, T2>, INotifyPropertyChanged -- Gitblit v1.8.0