领胜LDS 键盘AOI检测项目
patrick.xu
2020-12-16 5241a8f6377dfd1618610dd15fd05ed6f51c8ba2
1. 添加默认流程和默认产品功能
2. 修改批量建立检测项功能
7个文件已修改
564 ■■■■ 已修改文件
src/Bro.Common.Model/Helper/SettingHelper.cs 208 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.Process/M071Models.cs 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.Process/UI/M071_PatchInsertMeasurement.cs 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Process/ProcessControl.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.UI.Config/MenuForms/FrmOperation.Designer.cs 157 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.UI.Config/MenuForms/FrmOperation.cs 106 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.UI.Config/MenuForms/FrmOperation.resx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Common.Model/Helper/SettingHelper.cs
@@ -7,95 +7,145 @@
namespace Bro.Common.Helper
{
    public class SettingHelper
    public static class SettingHelper
    {
        const string SETTINGFILE = "Setting.json";
        const string PROPERTY_PRODUCTIONCODES = "ProductionCodes";
        const string PROPERTY_CONFIGPATH = "ConfigPath";
        const string PROPERTY_PROCESSCODES = "ProcessCodes";
        const string PROPERTY_DESCRIPTION = "Description";
        const string PROPERTY_ICONPATH = "IconPath";
        static string ConfigPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, SETTINGFILE);
        //static JObject data = null;
        //static JObject Data
        //{
        //    get
        //    {
        //        if (File.Exists(ConfigPath))
        //        {
        //            using (StreamReader reader = new StreamReader(ConfigPath, System.Text.Encoding.UTF8))
        //            {
        //                string dataStr = reader.ReadToEnd();
        //                data = JsonConvert.DeserializeObject<JObject>(dataStr);
        //            }
        //        }
        //        return data;
        //    }
        //}
        public static SettingInfo SettingInfo = null;
        static string SettingPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, SETTINGFILE);
        public static JObject GetSettingData()
        static SettingHelper()
        {
            JObject settingData = null;
            if (File.Exists(ConfigPath))
            if (File.Exists(SettingPath))
            {
                using (StreamReader reader = new StreamReader(ConfigPath, System.Text.Encoding.UTF8))
                using (StreamReader reader = new StreamReader(SettingPath, System.Text.Encoding.UTF8))
                {
                    string dataStr = reader.ReadToEnd();
                    settingData = JsonConvert.DeserializeObject<JObject>(dataStr);
                    SettingInfo = JsonConvert.DeserializeObject<SettingInfo>(dataStr);
                }
            }
            return settingData;
        }
        public static List<string> GetProductionCodes()
        {
            List<string> codes = new List<string>();
            var Data = GetSettingData();
            if (Data != null && Data.ContainsKey(PROPERTY_PRODUCTIONCODES))
            if (SettingInfo.ProductionCodes.Count == 0)
            {
                codes = Data.Value<JArray>(PROPERTY_PRODUCTIONCODES).ToList().ConvertAll(u => u.ToString());
                SettingInfo.ProductionCodes.Add("Default");
            }
            if (codes.Count == 0)
            if (!string.IsNullOrWhiteSpace(SettingInfo.DefaultProduction))
            {
                codes.Add("Default");
                if (SettingInfo.ProductionCodes.Contains(SettingInfo.DefaultProduction))
                {
                    SettingInfo.ProductionCodes.Remove(SettingInfo.DefaultProduction);
                    SettingInfo.ProductionCodes.Insert(0, SettingInfo.DefaultProduction);
                }
            }
            return codes;
            return SettingInfo.ProductionCodes;
        }
        public static List<string> GetProcessCodes()
        {
            List<string> codes = new List<string>();
            var Data = GetSettingData();
            if (Data != null && Data.ContainsKey(PROPERTY_PROCESSCODES))
            if (!string.IsNullOrWhiteSpace(SettingInfo.DefaultProcess))
            {
                codes = Data.Value<JArray>(PROPERTY_PROCESSCODES).ToList().ConvertAll(u => u.ToString());
                if (SettingInfo.ProcessCodes.Contains(SettingInfo.DefaultProcess))
                {
                    SettingInfo.ProcessCodes.Remove(SettingInfo.DefaultProcess);
                    SettingInfo.ProcessCodes.Insert(0, SettingInfo.DefaultProcess);
                }
            }
            return codes;
            return SettingInfo.ProcessCodes;
        }
        public static void AddNewProductionCode(string code)
        {
            var dataTemp = GetSettingData();
            if (!dataTemp.ContainsKey(PROPERTY_PRODUCTIONCODES))
            if (!SettingInfo.ProductionCodes.Contains(code))
            {
                dataTemp.Add(PROPERTY_PRODUCTIONCODES, new JArray());
                SettingInfo.ProductionCodes.Add(code);
            }
            if (dataTemp != null && dataTemp.ContainsKey(PROPERTY_PRODUCTIONCODES))
            {
                List<string> codes = GetProductionCodes();
                if (!codes.Contains(code))
                {
                    codes.Add(code);
                }
                dataTemp[PROPERTY_PRODUCTIONCODES] = new JArray(codes);
            SaveSettingInfo();
        }
                string newDataStr = JsonConvert.SerializeObject(dataTemp, new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.Auto });
                using (StreamWriter writer = new StreamWriter(ConfigPath, false, System.Text.Encoding.UTF8))
        public static string GetConfigFilePath()
        {
            return SettingInfo.ConfigPath;
        }
        public static string GetProgramDescription()
        {
            if (string.IsNullOrWhiteSpace(SettingInfo.Description))
            {
                SettingInfo.Description = "伯肯森自动化技术有限公司";
            }
            return SettingInfo.Description;
        }
        public static string GetProgramIcon()
        {
            string iconPath = SettingInfo.IconPath;
            if (string.IsNullOrWhiteSpace(iconPath) || !File.Exists(iconPath))
            {
                iconPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Logo.ico");
            }
            if (!File.Exists(iconPath))
            {
                iconPath = "";
            }
            return iconPath;
        }
        #region 保存
        public static void SetDefaultProcess(string processCode)
        {
            if (SettingInfo.DefaultProcess != processCode)
            {
                SettingInfo.DefaultProcess = processCode;
                SaveSettingInfo();
            }
        }
        public static void SetDefaultProduction(string productionCode)
        {
            if (SettingInfo.DefaultProduction != productionCode)
            {
                SettingInfo.DefaultProduction = productionCode;
                SaveSettingInfo();
            }
        }
        public static void SetDefault(string processCode,string productionCode)
        {
            bool isChanged = false;
            if (SettingInfo.DefaultProcess != processCode)
            {
                isChanged = true;
                SettingInfo.DefaultProcess = processCode;
            }
            if (SettingInfo.DefaultProduction != productionCode)
            {
                isChanged = true;
                SettingInfo.DefaultProduction = productionCode;
            }
            if (isChanged)
            {
                SaveSettingInfo();
            }
        }
        static object saveLock = new object();
        private static void SaveSettingInfo()
        {
            string newDataStr = JsonConvert.SerializeObject(SettingInfo);
            lock (saveLock)
            {
                using (StreamWriter writer = new StreamWriter(SettingPath, false, System.Text.Encoding.UTF8))
                {
                    writer.Write(newDataStr);
                    writer.Flush();
@@ -103,46 +153,20 @@
                }
            }
        }
        #endregion
    }
        public static string GetConfigFilePath()
        {
            string path = "";
            var Data = GetSettingData();
            if (Data != null && Data.ContainsKey(PROPERTY_CONFIGPATH))
            {
                path = Data.Value<string>(PROPERTY_CONFIGPATH);
            }
    public class SettingInfo
    {
        public List<string> ProcessCodes { get; set; } = new List<string>();
        public List<string> ProductionCodes { get; set; } = new List<string>();
            return path;
        }
        public string DefaultProcess { get; set; }
        public static string GetProgramDescription()
        {
            string desc = "伯肯森自动化技术有限公司";
            var Data = GetSettingData();
            if (Data != null && Data.ContainsKey(PROPERTY_DESCRIPTION))
            {
                desc = Data.Value<string>(PROPERTY_DESCRIPTION);
            }
        public string DefaultProduction { get; set; }
            return desc;
        }
        public static string GetProgramIcon()
        {
            string iconPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Logo.ico");
            if (!File.Exists(iconPath))
            {
                iconPath = "";
            }
            var Data = GetSettingData();
            if (Data != null && Data.ContainsKey(PROPERTY_ICONPATH))
            {
                iconPath = Data.Value<string>(PROPERTY_ICONPATH);
            }
            return iconPath;
        }
        public string ConfigPath { get; set; }
        public string Description { get; set; }
        public string IconPath { get; set; }
    }
}
src/Bro.M071.Process/M071Models.cs
@@ -24,17 +24,31 @@
        [TypeConverter(typeof(KeyNameDictConverter))]
        public string Key { get; set; }
        [Category("默认配置")]
        [Description("是否默认尺寸配置")]
        public bool IsDefault { get; set; } = false;
        //[Category("位置配置")]
        //[Description("单键在键盘平面图上的位置显示")]
        //public RectangleF KeyRect { get; set; } = new RectangleF(0, 0, 0, 0);
        [Category("位置配置")]
        [Description("单键在键盘平面图上的位置显示")]
        public Rectangle KeyRect { get; set; } = new Rectangle();
        [Description("单键左上角坐标")]
        [TypeConverter(typeof(ComplexObjectConvert))]
        [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))]
        public CustomizedPoint KeyPosition { get; set; } = new CustomizedPoint();
        [Category("位置配置")]
        [Description("单键尺寸")]
        public SizeF KeySize { get; set; } = new SizeF();
        [Category("位置配置")]
        [Description("单键之后间隙位置")]
        public Rectangle IntervalRect { get; set; } = new Rectangle();
        public SizeF IntervalSize { get; set; } = new SizeF();
        public string GetDisplayText()
        {
            return $"{Key}:{KeyRect.X},{KeyRect.Y},{KeyRect.Width},{KeyRect.Height}";
            return $"{(IsDefault ? "Default" : Key)}:{KeyPosition.X},{KeyPosition.Y},{KeySize.Width},{KeySize.Height}";
        }
    }
@@ -70,6 +84,11 @@
        [Description("检测算法路径")]
        [Editor(typeof(FileDialogEditor), typeof(UITypeEditor))]
        public string AlgorithemPath { get; set; }
        [Category("显示配置")]
        [Description("显示区域大小")]
        [DisplayName("标签大小")]
        public Size DisplayRect { get; set; }
    }
    public class KeyResult : IComplexDisplay
src/Bro.M071.Process/UI/M071_PatchInsertMeasurement.cs
@@ -43,7 +43,7 @@
            btnInsertMeasurement.Enabled = false;
            btnInsertMeasurement.Text = "生成中。。。";
            string measureType = cboMeasureType.Text;
            MeasureType measureType = cboMeasureType.SelectedItem as MeasureType;
            string startKey = cboStartKey.Text;
            string endKey = cboEndKey.Text;
@@ -56,7 +56,7 @@
            btnInsertMeasurement.Text = "生成检测项";
        }
        private async Task<string> PatchInsertMeasurement(string measureType, string startKey, string endKey)
        private async Task<string> PatchInsertMeasurement(MeasureType measureType, string startKey, string endKey)
        {
            return await Task.Run(() =>
             {
@@ -64,7 +64,6 @@
                 int endIndex = Config.KeyNameCollection.IndexOf(endKey);
                 KeyLocation startRect = Config.KeyLocationCollection.FirstOrDefault(u => u.Key == startKey);
                 //KeyLocation endRect = Config.KeyLocationCollection.FirstOrDefault(u => u.Key == endKey);
                 if (startRect == null)
                 {
                     return $"未配置{(startRect == null ? startKey : "")}的显示位置";
@@ -75,22 +74,31 @@
                     return "起始键不能小于结束键";
                 }
                 switch (measureType)
                 RectangleF curKeyRect = new RectangleF((float)startRect.KeyPosition.X, (float)startRect.KeyPosition.Y, startRect.KeySize.Width, startRect.KeySize.Height);
                 KeyLocation curKey = null;
                 switch (measureType.Code)
                 {
                     case "Slant":
                         {
                             for (int i = startIndex; i <= endIndex; i++)
                             {
                                 int curKeyEdge_X = (i - startIndex + 1) * (startRect.KeyRect.Width + startRect.IntervalRect.Width) + startRect.KeyRect.X - startRect.IntervalRect.Width;
                                 curKey = Config.KeyLocationCollection.FirstOrDefault(u => u.Key == Config.KeyNameCollection[i]);
                                 if (curKey == null)
                                 {
                                     curKey = Config.KeyLocationCollection.FirstOrDefault(u => u.IsDefault);
                                 }
                                 int lableX = (curKeyEdge_X + curKeyEdge_X - startRect.KeyRect.Width - 25) / 2;
                                 int lable_Up_Y = startRect.KeyRect.Y + (startRect.KeyRect.Height - 25) / 2;
                                 int lableX = (int)((curKeyRect.X + curKeyRect.X + curKey.KeySize.Width - measureType.DisplayRect.Width) / 2.0);
                                 int lable_Up_Y = (int)(startRect.KeyPosition.Y + (startRect.KeySize.Height - measureType.DisplayRect.Height) / 2.0);
                                 MeasurementUnit mUnitUp = new MeasurementUnit();
                                 mUnitUp.MeasureType = measureType;
                                 mUnitUp.MeasureType = measureType.Code;
                                 mUnitUp.KeyUnitCollection.Add(new KeyUnitBind() { Key = Config.KeyNameCollection[i], KeyResultId = "All" });
                                 mUnitUp.DisplayLocation = new Rectangle(lableX, lable_Up_Y, 25, 25);
                                 mUnitUp.DisplayLocation = new Rectangle(lableX, lable_Up_Y, measureType.DisplayRect.Width, measureType.DisplayRect.Height);
                                 Config.MeasurementUnitCollection.Add(mUnitUp);
                                 curKeyRect.Offset(curKey.KeySize.Width + curKey.IntervalSize.Width, 0);
                             }
                         }
                         break;
@@ -98,39 +106,44 @@
                         {
                             for (int i = startIndex; i < endIndex; i++)
                             {
                                 int curKeyEdge_X = (i - startIndex + 1) * (startRect.KeyRect.Width + startRect.IntervalRect.Width) + startRect.KeyRect.X - startRect.IntervalRect.Width;
                                 int nextKeyStart_X = curKeyEdge_X + startRect.IntervalRect.Width;
                                 curKey = Config.KeyLocationCollection.FirstOrDefault(u => u.Key == Config.KeyNameCollection[i]);
                                 if (curKey == null)
                                 {
                                     curKey = Config.KeyLocationCollection.FirstOrDefault(u => u.IsDefault);
                                 }
                                 int lableX = (curKeyEdge_X + nextKeyStart_X - 25) / 2;
                                 int lable_Up_Y = startRect.KeyRect.Y + 4;
                                 int lable_Down_y = startRect.KeyRect.Y + startRect.KeyRect.Height - 4 - 12;
                                 int lableX = (int)((curKeyRect.X + curKey.KeySize.Width + curKeyRect.X + curKey.KeySize.Width + curKey.IntervalSize.Width - measureType.DisplayRect.Width) / 2.0);
                                 int lable_Up_Y = (int)startRect.KeyPosition.Y + 4;
                                 int lable_Down_y = (int)(startRect.KeyPosition.Y + startRect.KeySize.Height - 4 - measureType.DisplayRect.Height);
                                 MeasurementUnit mUnitUp = new MeasurementUnit();
                                 mUnitUp.MeasureType = measureType;
                                 mUnitUp.MeasureType = measureType.Code;
                                 mUnitUp.KeyUnitCollection.Add(new KeyUnitBind() { Key = Config.KeyNameCollection[i], KeyResultId = "Z2" });
                                 mUnitUp.KeyUnitCollection.Add(new KeyUnitBind() { Key = Config.KeyNameCollection[i + 1], KeyResultId = "Z1" });
                                 mUnitUp.DisplayLocation = new Rectangle(lableX, lable_Up_Y, 25, 12);
                                 mUnitUp.DisplayLocation = new Rectangle(lableX, lable_Up_Y, measureType.DisplayRect.Width, measureType.DisplayRect.Height);
                                 Config.MeasurementUnitCollection.Add(mUnitUp);
                                 MeasurementUnit mUnitDown = new MeasurementUnit();
                                 mUnitDown.MeasureType = measureType;
                                 mUnitDown.MeasureType = measureType.Code;
                                 mUnitDown.KeyUnitCollection.Add(new KeyUnitBind() { Key = Config.KeyNameCollection[i], KeyResultId = "Z4" });
                                 mUnitDown.KeyUnitCollection.Add(new KeyUnitBind() { Key = Config.KeyNameCollection[i + 1], KeyResultId = "Z3" });
                                 mUnitDown.DisplayLocation = new Rectangle(lableX, lable_Down_y, 25, 12);
                                 mUnitDown.DisplayLocation = new Rectangle(lableX, lable_Down_y, measureType.DisplayRect.Width, measureType.DisplayRect.Height);
                                 Config.MeasurementUnitCollection.Add(mUnitDown);
                                 curKeyRect.Offset(curKey.KeySize.Width + curKey.IntervalSize.Width, 0);
                             }
                         }
                         break;
                     case "RowAlignment":
                         {
                             int start_X = startRect.KeyRect.X + startRect.KeyRect.Width / 3;
                             int end_X = (startRect.KeyRect.Width + startRect.IntervalRect.Width) * (endIndex - startIndex) + startRect.KeyRect.X + startRect.KeyRect.Width * 2 / 3;
                             int start_X = (int)(startRect.KeyPosition.X + startRect.KeySize.Width / 3.0);
                             int end_X = (int)((startRect.KeySize.Width + startRect.IntervalSize.Width) * (endIndex - startIndex) + startRect.KeyPosition.X + startRect.KeySize.Width * 2.0 / 3.0);
                             int lable_Up_Y = startRect.KeyRect.Y - 6;
                             int lable_Down_Y = startRect.KeyRect.Y + startRect.KeyRect.Height - 6;
                             int lable_Up_Y = (int)startRect.KeyPosition.Y - 6;
                             int lable_Down_Y = (int)(startRect.KeyPosition.Y + startRect.KeySize.Height - 6);
                             MeasurementUnit mUnitUp = new MeasurementUnit();
                             mUnitUp.MeasureType = measureType;
                             mUnitUp.MeasureType = measureType.Code;
                             for (int i = startIndex; i < endIndex; i++)
                             {
                                 mUnitUp.KeyUnitCollection.Add(new KeyUnitBind() { Key = Config.KeyNameCollection[i], KeyResultId = "Z2" });
@@ -141,7 +154,7 @@
                             Config.MeasurementUnitCollection.Add(mUnitUp);
                             MeasurementUnit mUnitDown = new MeasurementUnit();
                             mUnitDown.MeasureType = measureType;
                             mUnitDown.MeasureType = measureType.Code;
                             for (int i = startIndex; i < endIndex; i++)
                             {
                                 mUnitDown.KeyUnitCollection.Add(new KeyUnitBind() { Key = Config.KeyNameCollection[i], KeyResultId = "Z4" });
src/Bro.Process/ProcessControl.cs
@@ -45,7 +45,6 @@
        #region Event
        public event Action<string, Bitmap, string> OnBitmapOutput;
        //public event Action<string, object> OnObjectOutput;
        public Action<DateTime, Exception> OnExceptionOccured { get; set; }
        public event Action<DeviceState> OnProcessStateChanged;
        public event Action<DateTime, string, string> OnLog;
src/Bro.UI.Config/MenuForms/FrmOperation.Designer.cs
@@ -31,39 +31,71 @@
            this.components = new System.ComponentModel.Container();
            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmOperation));
            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
            this.btnStart = new System.Windows.Forms.Button();
            this.imgList = new System.Windows.Forms.ImageList(this.components);
            this.plProcess = new System.Windows.Forms.Panel();
            this.cboProcessCode = new System.Windows.Forms.ComboBox();
            this.lblProcessCode = new System.Windows.Forms.Label();
            this.btnLoad = new System.Windows.Forms.Button();
            this.imgListLoad = new System.Windows.Forms.ImageList(this.components);
            this.plProduct = new System.Windows.Forms.Panel();
            this.cboProductionCode = new System.Windows.Forms.ComboBox();
            this.lblProductionCode = new System.Windows.Forms.Label();
            this.plOperation = new System.Windows.Forms.Panel();
            this.btnStart = new System.Windows.Forms.Button();
            this.imgList = new System.Windows.Forms.ImageList(this.components);
            this.btnLoad = new System.Windows.Forms.Button();
            this.imgListLoad = new System.Windows.Forms.ImageList(this.components);
            this.tableLayoutPanel1.SuspendLayout();
            this.plProcess.SuspendLayout();
            this.plProduct.SuspendLayout();
            this.plOperation.SuspendLayout();
            this.SuspendLayout();
            // 
            // tableLayoutPanel1
            // 
            this.tableLayoutPanel1.ColumnCount = 1;
            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
            this.tableLayoutPanel1.Controls.Add(this.plProcess, 0, 0);
            this.tableLayoutPanel1.Controls.Add(this.plProduct, 0, 1);
            this.tableLayoutPanel1.Controls.Add(this.plOperation, 0, 2);
            this.tableLayoutPanel1.Controls.Add(this.btnStart, 0, 7);
            this.tableLayoutPanel1.Controls.Add(this.plProcess, 0, 1);
            this.tableLayoutPanel1.Controls.Add(this.btnLoad, 0, 5);
            this.tableLayoutPanel1.Controls.Add(this.plProduct, 0, 3);
            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
            this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(15, 3, 15, 3);
            this.tableLayoutPanel1.Name = "tableLayoutPanel1";
            this.tableLayoutPanel1.RowCount = 3;
            this.tableLayoutPanel1.RowCount = 9;
            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 5F));
            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 5F));
            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 5F));
            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 5F));
            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
            this.tableLayoutPanel1.Size = new System.Drawing.Size(184, 214);
            this.tableLayoutPanel1.Size = new System.Drawing.Size(184, 427);
            this.tableLayoutPanel1.TabIndex = 0;
            //
            // btnStart
            //
            this.btnStart.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
            | System.Windows.Forms.AnchorStyles.Right)));
            this.btnStart.AutoSize = true;
            this.btnStart.Cursor = System.Windows.Forms.Cursors.Hand;
            this.btnStart.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.btnStart.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
            this.btnStart.ImageIndex = 0;
            this.btnStart.ImageList = this.imgList;
            this.btnStart.Location = new System.Drawing.Point(3, 132);
            this.btnStart.Name = "btnStart";
            this.btnStart.Size = new System.Drawing.Size(178, 35);
            this.btnStart.TabIndex = 1;
            this.btnStart.Text = "  启  动";
            this.btnStart.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
            this.btnStart.UseVisualStyleBackColor = true;
            this.btnStart.Click += new System.EventHandler(this.btnStart_Click);
            //
            // imgList
            //
            this.imgList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imgList.ImageStream")));
            this.imgList.TransparentColor = System.Drawing.Color.Transparent;
            this.imgList.Images.SetKeyName(0, "start_32px.png");
            this.imgList.Images.SetKeyName(1, "stop_32px.png");
            // 
            // plProcess
            // 
@@ -71,7 +103,7 @@
            this.plProcess.Controls.Add(this.cboProcessCode);
            this.plProcess.Controls.Add(this.lblProcessCode);
            this.plProcess.Dock = System.Windows.Forms.DockStyle.Fill;
            this.plProcess.Location = new System.Drawing.Point(3, 3);
            this.plProcess.Location = new System.Drawing.Point(3, 8);
            this.plProcess.Name = "plProcess";
            this.plProcess.Size = new System.Drawing.Size(178, 29);
            this.plProcess.TabIndex = 0;
@@ -90,11 +122,36 @@
            // lblProcessCode
            // 
            this.lblProcessCode.AutoSize = true;
            this.lblProcessCode.Location = new System.Drawing.Point(4, 11);
            this.lblProcessCode.Location = new System.Drawing.Point(4, 8);
            this.lblProcessCode.Name = "lblProcessCode";
            this.lblProcessCode.Size = new System.Drawing.Size(67, 13);
            this.lblProcessCode.TabIndex = 0;
            this.lblProcessCode.Text = "流程代码:";
            //
            // btnLoad
            //
            this.btnLoad.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
            | System.Windows.Forms.AnchorStyles.Right)));
            this.btnLoad.Cursor = System.Windows.Forms.Cursors.Hand;
            this.btnLoad.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.btnLoad.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
            this.btnLoad.ImageKey = "load_32px.png";
            this.btnLoad.ImageList = this.imgListLoad;
            this.btnLoad.Location = new System.Drawing.Point(3, 86);
            this.btnLoad.Name = "btnLoad";
            this.btnLoad.Size = new System.Drawing.Size(178, 35);
            this.btnLoad.TabIndex = 0;
            this.btnLoad.Text = "  载  入";
            this.btnLoad.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
            this.btnLoad.UseMnemonic = false;
            this.btnLoad.UseVisualStyleBackColor = false;
            this.btnLoad.Click += new System.EventHandler(this.btnLoad_Click);
            //
            // imgListLoad
            //
            this.imgListLoad.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imgListLoad.ImageStream")));
            this.imgListLoad.TransparentColor = System.Drawing.Color.Transparent;
            this.imgListLoad.Images.SetKeyName(0, "load_32px.png");
            // 
            // plProduct
            // 
@@ -102,7 +159,7 @@
            this.plProduct.Controls.Add(this.cboProductionCode);
            this.plProduct.Controls.Add(this.lblProductionCode);
            this.plProduct.Dock = System.Windows.Forms.DockStyle.Fill;
            this.plProduct.Location = new System.Drawing.Point(3, 38);
            this.plProduct.Location = new System.Drawing.Point(3, 48);
            this.plProduct.Name = "plProduct";
            this.plProduct.Size = new System.Drawing.Size(178, 27);
            this.plProduct.TabIndex = 1;
@@ -121,79 +178,16 @@
            // lblProductionCode
            // 
            this.lblProductionCode.AutoSize = true;
            this.lblProductionCode.Location = new System.Drawing.Point(4, 9);
            this.lblProductionCode.Location = new System.Drawing.Point(4, 6);
            this.lblProductionCode.Name = "lblProductionCode";
            this.lblProductionCode.Size = new System.Drawing.Size(67, 13);
            this.lblProductionCode.TabIndex = 0;
            this.lblProductionCode.Text = "产品代码:";
            // 
            // plOperation
            //
            this.plOperation.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
            | System.Windows.Forms.AnchorStyles.Left)
            | System.Windows.Forms.AnchorStyles.Right)));
            this.plOperation.Controls.Add(this.btnStart);
            this.plOperation.Controls.Add(this.btnLoad);
            this.plOperation.Location = new System.Drawing.Point(3, 71);
            this.plOperation.Name = "plOperation";
            this.plOperation.Size = new System.Drawing.Size(178, 140);
            this.plOperation.TabIndex = 2;
            //
            // btnStart
            //
            this.btnStart.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
            | System.Windows.Forms.AnchorStyles.Right)));
            this.btnStart.AutoSize = true;
            this.btnStart.Cursor = System.Windows.Forms.Cursors.Hand;
            this.btnStart.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.btnStart.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
            this.btnStart.ImageIndex = 0;
            this.btnStart.ImageList = this.imgList;
            this.btnStart.Location = new System.Drawing.Point(10, 82);
            this.btnStart.Name = "btnStart";
            this.btnStart.Size = new System.Drawing.Size(150, 35);
            this.btnStart.TabIndex = 1;
            this.btnStart.Text = "  启  动";
            this.btnStart.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
            this.btnStart.UseVisualStyleBackColor = true;
            this.btnStart.Click += new System.EventHandler(this.btnStart_Click);
            //
            // imgList
            //
            this.imgList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imgList.ImageStream")));
            this.imgList.TransparentColor = System.Drawing.Color.Transparent;
            this.imgList.Images.SetKeyName(0, "start_32px.png");
            this.imgList.Images.SetKeyName(1, "stop_32px.png");
            //
            // btnLoad
            //
            this.btnLoad.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
            | System.Windows.Forms.AnchorStyles.Right)));
            this.btnLoad.Cursor = System.Windows.Forms.Cursors.Hand;
            this.btnLoad.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.btnLoad.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
            this.btnLoad.ImageKey = "load_32px.png";
            this.btnLoad.ImageList = this.imgListLoad;
            this.btnLoad.Location = new System.Drawing.Point(10, 24);
            this.btnLoad.Name = "btnLoad";
            this.btnLoad.Size = new System.Drawing.Size(150, 35);
            this.btnLoad.TabIndex = 0;
            this.btnLoad.Text = "  载  入";
            this.btnLoad.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
            this.btnLoad.UseMnemonic = false;
            this.btnLoad.UseVisualStyleBackColor = false;
            this.btnLoad.Click += new System.EventHandler(this.btnLoad_Click);
            //
            // imgListLoad
            //
            this.imgListLoad.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imgListLoad.ImageStream")));
            this.imgListLoad.TransparentColor = System.Drawing.Color.Transparent;
            this.imgListLoad.Images.SetKeyName(0, "load_32px.png");
            //
            // FrmOperation
            // 
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
            this.ClientSize = new System.Drawing.Size(184, 214);
            this.ClientSize = new System.Drawing.Size(184, 427);
            this.Controls.Add(this.tableLayoutPanel1);
            this.Name = "FrmOperation";
            this.Text = "FrmOperation";
@@ -204,8 +198,6 @@
            this.plProcess.PerformLayout();
            this.plProduct.ResumeLayout(false);
            this.plProduct.PerformLayout();
            this.plOperation.ResumeLayout(false);
            this.plOperation.PerformLayout();
            this.ResumeLayout(false);
        }
@@ -215,7 +207,6 @@
        private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
        private System.Windows.Forms.Panel plProcess;
        private System.Windows.Forms.Panel plProduct;
        private System.Windows.Forms.Panel plOperation;
        private System.Windows.Forms.ComboBox cboProcessCode;
        private System.Windows.Forms.Label lblProcessCode;
        private System.Windows.Forms.ComboBox cboProductionCode;
src/Bro.UI.Config/MenuForms/FrmOperation.cs
@@ -27,22 +27,6 @@
            LoadProcessCode();
            LoadProductionCode();
            //Task.Run(() =>
            //{
            //    Thread.Sleep(1000);
            //    if ((!plProcess.Visible) && (!plProduct.Visible) && _isFirstLoad)
            //    {
            //        LoadProcess();
            //        _isFirstLoad = false;
            //    }
            //});
            //if ((!plProcess.Visible) && (!plProduct.Visible) && _isFirstLoad)
            //{
            //    LoadProcess();
            //    _isFirstLoad = false;
            //}
        }
        #region Load Codes
@@ -71,7 +55,7 @@
                pCodes = systemProcessCodes;
            }
            if (pCodes.Count == 1 && pCodes[0] == "")
            if (pCodes.Count == 1)
            {
                plProcess.Visible = false;
                _processCode = pCodes[0];
@@ -79,12 +63,21 @@
            }
            else
            {
                pCodes.Remove("");
                pCodes.RemoveAll(p => string.IsNullOrWhiteSpace(p));
            }
            if (pCodes.Count > 1)
            {
                plProcess.Visible = true;
                //if (!string.IsNullOrWhiteSpace(SettingHelper.SettingInfo.DefaultProcess))
                //{
                //    if (pCodes.Contains(SettingHelper.SettingInfo.DefaultProcess))
                //    {
                //        pCodes.Remove(SettingHelper.SettingInfo.DefaultProcess);
                //        pCodes.Insert(0, SettingHelper.SettingInfo.DefaultProcess);
                //    }
                //}
                cboProcessCode.SelectedIndexChanged -= cboProcessCode_SelectedIndexChanged;
                UIHelper.SetCombo(cboProcessCode, pCodes, "", "");
@@ -109,6 +102,16 @@
            if (pCodes.Count > 1)
            {
                plProduct.Visible = true;
                //if (!string.IsNullOrWhiteSpace(SettingHelper.SettingInfo.DefaultProduction))
                //{
                //    if (pCodes.Contains(SettingHelper.SettingInfo.DefaultProduction))
                //    {
                //        pCodes.Remove(SettingHelper.SettingInfo.DefaultProduction);
                //        pCodes.Insert(0, SettingHelper.SettingInfo.DefaultProduction);
                //    }
                //}
                cboProductionCode.SelectedIndexChanged -= cboProductionCode_SelectedIndexChanged;
                UIHelper.SetCombo(cboProductionCode, pCodes, "", "");
                cboProductionCode.SelectedIndexChanged += cboProductionCode_SelectedIndexChanged;
@@ -133,12 +136,6 @@
        private void FrmOperation_Load(object sender, System.EventArgs e)
        {
            //if ((!plProcess.Visible) && (!plProduct.Visible) && _isFirstLoad)
            //{
            //    LoadProcess();
            //    _isFirstLoad = false;
            //}
            btnStart.Enabled = true;
        }
@@ -148,6 +145,8 @@
            LogAsync(DateTime.Now, "载入流程");
            LoadProcess();
            SettingHelper.SetDefault(_processCode, _productionCode);
        }
        bool isStart = true;
@@ -161,11 +160,8 @@
            btnStart.Enabled = false;
            //Task.Run(() =>
            //{
            try
            {
                //if (Process.ProcessState != EnumHelper.DeviceState.DSOpen)
                if (isStart)
                {
                    await ProcessOperation(true);
@@ -183,10 +179,8 @@
            }
            finally
            {
                //this.BeginInvoke(new Action(() => btnStart.Enabled = true));
                btnStart.Enabled = true;
            }
            //});
        }
        string _currentProcssCode = "";
@@ -204,7 +198,6 @@
                    return;
                }
                //Process.OnProcessStateChanged += Process_OnProcessStateChanged;
                Process.OnLog -= Process_OnLog;
                Process.OnLog += Process_OnLog;
@@ -222,80 +215,27 @@
            LogAsync(dt, prefix, msg);
        }
        //private void Process_OnProcessStateChanged(EnumHelper.DeviceState state)
        //{
        //    try
        //    {
        //        if (InvokeRequired)
        //        {
        //            this.Invoke(new Action<EnumHelper.DeviceState>(Process_OnProcessStateChanged), state);
        //        }
        //        else
        //        {
        //            try
        //            {
        //                btnStart.Enabled = true;
        //                switch (state)
        //                {
        //                    case EnumHelper.DeviceState.DSOpen:
        //                        btnStart.Text = "  停  止";
        //                        btnStart.ImageIndex = 1;
        //                        btnStart.BackColor = Color.FromArgb(0x7f, Color.LimeGreen);
        //                        btnLoad.Enabled = false;
        //                        break;
        //                    case EnumHelper.DeviceState.DSClose:
        //                        btnStart.Text = "  启  动";
        //                        btnStart.ImageIndex = 0;
        //                        btnStart.BackColor = SystemColors.Control;
        //                        btnLoad.Enabled = true;
        //                        break;
        //                    default:
        //                        break;
        //                }
        //                this.Refresh();
        //            }
        //            catch (Exception ex)
        //            {
        //            }
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //    }
        //}
        private async Task ProcessOperation(bool isStart)
        {
            if (isStart)
            {
                await Task.Run(() => Process.Open());
                //this.BeginInvoke(new Action(() =>
                //{
                btnStart.Text = "  停  止";
                btnStart.ImageIndex = 1;
                btnStart.BackColor = Color.FromArgb(0x7f, Color.LimeGreen);
                btnLoad.Enabled = false;
                //}));
            }
            else
            {
                await Task.Run(() => Process.Close());
                //this.BeginInvoke(new Action(() =>
                //{
                btnStart.Text = "  启  动";
                btnStart.ImageIndex = 0;
                btnStart.BackColor = SystemColors.Control;
                btnLoad.Enabled = true;
                //}));
            }
        }
    }
src/Bro.UI.Config/MenuForms/FrmOperation.resx
@@ -125,7 +125,7 @@
        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADm
        CgAAAk1TRnQBSQFMAgEBAgEAAfgBAAH4AQABGAEAARgBAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
        CgAAAk1TRnQBSQFMAgEBAgEAARABAQEQAQEBGAEAARgBAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
        AwABYAMAARgDAAEBAQABCAYAAQkYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
        AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
        AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
@@ -182,7 +182,7 @@
        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD4
        CAAAAk1TRnQBSQFMAwEBAAH4AQAB+AEAARgBAAEYAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA
        CAAAAk1TRnQBSQFMAwEBAAEQAQEBEAEBARgBAAEYAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA
        AWADAAEYAwABAQEAAQgGAAEJGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA
        AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA
        AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm