diff --git a/DH.Devices.Camera/Do3ThinkCamera.cs b/DH.Devices.Camera/Do3ThinkCamera.cs index a573bf1..90d2f1c 100644 --- a/DH.Devices.Camera/Do3ThinkCamera.cs +++ b/DH.Devices.Camera/Do3ThinkCamera.cs @@ -376,7 +376,7 @@ namespace DH.Devices.Camera { dvpStreamState StreamState = new dvpStreamState(); nRet = DVPCamera.dvpGetStreamState(m_handle, ref StreamState); - Debug.Assert(nRet == dvpStatus.DVP_STATUS_OK); + //Debug.Assert(nRet == dvpStatus.DVP_STATUS_OK); if (StreamState == dvpStreamState.STATE_STARTED) { // stop camera diff --git a/DHSoftware/DHSoftware.csproj b/DHSoftware/DHSoftware.csproj index 28f25c9..8afdfd0 100644 --- a/DHSoftware/DHSoftware.csproj +++ b/DHSoftware/DHSoftware.csproj @@ -12,6 +12,8 @@ WinExe + + diff --git a/DHSoftware/LoginWindow.cs b/DHSoftware/LoginWindow.cs index 6bec4e3..b4a6b85 100644 --- a/DHSoftware/LoginWindow.cs +++ b/DHSoftware/LoginWindow.cs @@ -17,7 +17,19 @@ namespace DHSoftware button_cancel.Click += Button_cancel_Click; } - + /// + /// 窗体对象实例 + /// + private static LoginWindow _instance; + internal static LoginWindow Instance + { + get + { + if (_instance == null || _instance.IsDisposed) + _instance = new LoginWindow(); + return _instance; + } + } private void Button_cancel_Click(object? sender, EventArgs e) { this.Dispose(); diff --git a/DHSoftware/MainWindow.Designer.cs b/DHSoftware/MainWindow.Designer.cs index 03638ab..ad67f56 100644 --- a/DHSoftware/MainWindow.Designer.cs +++ b/DHSoftware/MainWindow.Designer.cs @@ -450,7 +450,7 @@ StartPosition = FormStartPosition.CenterScreen; Text = "CCD光学筛选系统"; WindowState = FormWindowState.Maximized; - FormClosed += MainWindow_FormClosed; + FormClosing += MainWindow_FormClosing; Load += MainWindow_Load; titlebar.ResumeLayout(false); pageHeader1.ResumeLayout(false); @@ -503,6 +503,6 @@ private AntdUI.Button btnDeleteProject; private AntdUI.Button btnAddProject; private AntdUI.Button btnLoadProject; - private AntdUI.Select sltProjects; + public AntdUI.Select sltProjects; } } \ No newline at end of file diff --git a/DHSoftware/MainWindow.cs b/DHSoftware/MainWindow.cs index f9933ca..eafd942 100644 --- a/DHSoftware/MainWindow.cs +++ b/DHSoftware/MainWindow.cs @@ -41,13 +41,8 @@ namespace DHSoftware public partial class MainWindow : AntdUI.Window { - private UserControl currControl; - private bool isUpdatingTabs = false;//用于阻止Tabs更新 - private bool isLight = true; - private int testCounter = 1; - Dictionary> _cameraRelatedDetectionDict = null; private string _loginName; @@ -187,21 +182,28 @@ namespace DHSoftware } - + /// + /// 窗体对象实例 + /// + private static MainWindow _instance; + internal static MainWindow Instance + { + get + { + if (_instance == null) + _instance = new MainWindow(); + return _instance; + } + } SegmentedItem itemToHide; private void InitData() { - itemToHide = segmented1.Items[4]; segmented1.Items.Remove(itemToHide); - //加载方案 - LoadScheme(); - - } - private void LoadScheme() + public void LoadScheme() { try { @@ -244,6 +246,123 @@ namespace DHSoftware AntdUI.Message.error(this, ex.Message, autoClose: 3); } } + + public void ConnectCamera() + { + Cameras.Clear(); + HKCameras.Clear(); + if (ConfigModel.CameraBaseList.Count > 0) + { + for (int i = 0; i < ConfigModel.CameraBaseList.Count; i++) + { + var cameraBase = ConfigModel.CameraBaseList[i]; + if (cameraBase.CamType == EnumCamType.度申Do3think) + { + Do3ThinkCamera cam = new Do3ThinkCamera(); + + cam.CameraName = cameraBase.CameraName; + cam.CameraIP = cameraBase.CameraIP; + cam.IsEnabled = cameraBase.IsEnabled; + Cameras.Add(cam); + //cam.CameraConnect(); + cam.OnHImageOutput += OnCameraHImageOutput; + } + else if (cameraBase.CamType == EnumCamType.海康hik) + { + HikVisionCamera cam = new HikVisionCamera(); + cam.CameraName = cameraBase.CameraName; + cam.CameraIP = cameraBase.CameraIP; + cam.IsEnabled = cameraBase.IsEnabled; + HKCameras.Add(cam); + // cam.CameraConnect(); + cam.OnHImageOutput += OnCameraHImageOutput; + } + + } + } + } + + public void ConnectPLC() + { + if (ConfigModel.PLCBaseList.Count > 0) + { + for (int i = 0; i < ConfigModel.PLCBaseList.Count; i++) + { + var plcBase = ConfigModel.PLCBaseList[i]; + if (plcBase.PLCType == EnumPLCType.信捷XC网口) + { + + PLC.IP = plcBase.IP; + PLC.Enable = plcBase.Enable; + PLC.PLCName = plcBase.PLCName; + PLC.PLCItemList = plcBase.PLCItemList; + PLC.Port = plcBase.Port; + PLC.PLCConnect(); + } + } + + } + } + + public void InitModel() + { + Dectection.Clear(); + _cameraRelatedDetectionDict = new(); + + if (ConfigModel.DetectionList.Count > 0) + { + + for (int i = 0; i < ConfigModel.DetectionList.Count; i++) + { + DetectionConfig detectionConfig = ConfigModel.DetectionList[i]; + var detection = ConfigModel.DetectionList[i]; + detectionConfig.CameraCollects = detection.CameraCollects; + detectionConfig.ModelconfThreshold = detection.ModelconfThreshold; + detectionConfig.ModelWidth = detection.ModelWidth; + detectionConfig.ModelHeight = detection.ModelHeight; + detectionConfig.In_lable_path = detection.In_lable_path; + detectionConfig.IsEnabled = detection.IsEnabled; + detectionConfig.ShowLocation.X = detection.ShowLocation.X; + detectionConfig.ShowLocation.Y = detection.ShowLocation.Y; + DetectionConfigs.Add(detectionConfig); + } + } + DetectionConfigs.ForEach(detection => + { + + detection.CameraCollects.ForEach(cam => + { + List Dets = new List + { + detection.Id + }; + if (!_cameraRelatedDetectionDict.ContainsKey(cam.CameraSourceId)) + { + _cameraRelatedDetectionDict.Add(cam.CameraSourceId, Dets); + } + else + { + _cameraRelatedDetectionDict[cam.CameraSourceId].Add(detection.Id); + } + + + } + ); + }); + string inferenceDevice = "CPU"; + + + // + _visionEngine = new SimboVisionDriver(); + _visionEngine.DetectionConfigs = DetectionConfigs; + + //初始化模型 加载模型 + _visionEngine.Init(); + CtrlVisionRunBase ctrlVisionRun = new CtrlVisionRunBase(_visionEngine); + tabImgDisplay.Controls.Add(ctrlVisionRun); + + + } private void BindEventHandler() { @@ -378,19 +497,46 @@ namespace DHSoftware { } - - private void MainWindow_FormClosed(object sender, FormClosedEventArgs e) + private bool _isClosing = false; // 状态标志 + private void MainWindow_FormClosing(object sender, FormClosingEventArgs e) { - foreach (var camera in Cameras) - { - camera.CameraDisConnect(); + if (_isClosing) return; + _isClosing = true; + // 取消默认关闭行为 + e.Cancel = true; + + // 立即隐藏主窗口 + this.Hide(); + + // 显示关闭界面 + CloseWindow.Instance.Show(); + Thread.Sleep(200); + try + { + // 执行关闭操作 + foreach (var camera in Cameras) + { + camera.CameraDisConnect(); + } + foreach (var camera in HKCameras) + { + camera.CameraDisConnect(); + } + PLC.PLCDisConnect(); + CloseWindow.Instance.Close();// 关闭提示窗口 + //Application.Exit(); + System.Environment.Exit(0); + + } - foreach (var camera in HKCameras) - { - //var hk as HikVisionCamera; - camera.CameraDisConnect(); + catch (Exception ex) + { + CloseWindow.Instance.Close(); + + System.Environment.Exit(0); + } - PLC.PLCDisConnect(); + } private void segmented1_SelectIndexChanged(object sender, EventArgs e) @@ -435,115 +581,7 @@ namespace DHSoftware public DateTime startTime; private void HandleStartButton() { - Cameras.Clear(); - HKCameras.Clear(); - Dectection.Clear(); - _cameraRelatedDetectionDict = new(); - //初始化相机 链接相机 - if (ConfigModel.CameraBaseList.Count > 0) - { - for (int i = 0; i 0) - { - for (int i = 0; i < ConfigModel.PLCBaseList.Count; i++) - { - var plcBase = ConfigModel.PLCBaseList[i]; - if(plcBase.PLCType==EnumPLCType.信捷XC网口) - { - - PLC.IP = plcBase.IP; - PLC.Enable = plcBase.Enable; - PLC.PLCName = plcBase.PLCName; - PLC.PLCItemList=plcBase.PLCItemList; - PLC.Port= plcBase.Port; - // PLC.PLCConnect(); - } - } - - } - if (ConfigModel.DetectionList.Count > 0) - { - - for (int i = 0; i < ConfigModel.DetectionList.Count; i++) - { - DetectionConfig detectionConfig = ConfigModel.DetectionList[i]; - var detection = ConfigModel.DetectionList[i]; - detectionConfig.CameraCollects = detection.CameraCollects; - detectionConfig.ModelconfThreshold = detection.ModelconfThreshold; - detectionConfig.ModelWidth = detection.ModelWidth; - detectionConfig.ModelHeight = detection.ModelHeight; - detectionConfig.In_lable_path = detection.In_lable_path; - detectionConfig.IsEnabled = detection.IsEnabled; - detectionConfig.ShowLocation.X = detection.ShowLocation.X; - detectionConfig.ShowLocation.Y = detection.ShowLocation.Y; - DetectionConfigs.Add(detectionConfig); - } - } - DetectionConfigs.ForEach(detection => - { - - detection.CameraCollects.ForEach(cam => - { - List Dets = new List - { - detection.Id - }; - if (!_cameraRelatedDetectionDict.ContainsKey(cam.CameraSourceId)) - { - _cameraRelatedDetectionDict.Add(cam.CameraSourceId, Dets); - } - else - { - _cameraRelatedDetectionDict[cam.CameraSourceId].Add(detection.Id); - } - - - } - ); - }); - string inferenceDevice = "CPU"; - - - // - _visionEngine = new SimboVisionDriver(); - _visionEngine.DetectionConfigs = DetectionConfigs; - - //初始化模型 加载模型 - _visionEngine.Init(); - CtrlVisionRunBase ctrlVisionRun = new CtrlVisionRunBase(_visionEngine); - tabImgDisplay.Controls.Add(ctrlVisionRun); - StartProcess(); - - - } private static int currentRegister = 411; // 初始为 D411 private void StartProcess() @@ -1441,45 +1479,16 @@ namespace DHSoftware private void HandleSettingsButton() { // Add the code for the "设置" button click here - // MessageBox.Show("设置按钮按下"); - List listCamBase = new List(); - CameraBase cam1 = new CameraBase - { - CameraName = "Cam1", - CameraIP = "192.168.1.101", - SerialNumber = "1000001", - Gain = 60, - Exposure = 10, - RotateImage = 0, - IsEnabled = false, - }; - CameraBase cam2 = new CameraBase - { - CameraName = "Cam2", - CameraIP = "192.168.1.101", - SerialNumber = "1000002", - Gain = 60, - Exposure = 10, - RotateImage = 0, - IsEnabled = false, - }; - listCamBase.Add(cam1); - listCamBase.Add(cam2); - - SettingWindow settingWindow = new SettingWindow(); - settingWindow.Show(); - //s.cameras = listCamBase; - //s.Show(); + SettingWindow.Instance.Show(); } private void HandleLoginButton() { // Add the code for the "登录" button click here - LoginWindow loginWindow = new LoginWindow(); - loginWindow.Owner = this; - loginWindow.Show(); + LoginWindow.Instance.Owner = this; + LoginWindow.Instance.Show(); } private void splitter1_SplitterMoved(object sender, SplitterEventArgs e) diff --git a/DHSoftware/Program.cs b/DHSoftware/Program.cs index 754a0e3..cdda570 100644 --- a/DHSoftware/Program.cs +++ b/DHSoftware/Program.cs @@ -1,8 +1,11 @@ using System; using System.Drawing; using System.Windows.Forms; +using DH.Commons.Helper; +using DH.Commons.Models; using DHSoftware.Utils; using DHSoftware.Views; +using Microsoft.VisualBasic.Logging; namespace DHSoftware { @@ -15,20 +18,38 @@ namespace DHSoftware [STAThread] static void Main() { + // 必须在第一个窗口创建前调用以下两行 + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + + // 注册全局异常处理 Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); + // 初始化AntdUI配置 AntdUI.Localization.DefaultLanguage = "zh-CN"; - //若文字不清晰,切换其他渲染方式 AntdUI.Config.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit; AntdUI.Config.SetCorrectionTextRendering("Microsoft YaHei UI"); - - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); AntdUI.Style.Set(AntdUI.Colour.Primary, Color.FromArgb(46, 108, 227)); + + // 现在再创建窗口 + WelcomeWindow.Instance.Show(); + UpdateStep(0, "正在初始化", true); + UpdateStep(10, "正在加载数据库", true); DatabaseUtil.InitializeDatabase(); - mainWindow = new MainWindow(); - Application.Run(mainWindow); + UpdateStep(30, "正在加载解决方案", true); + MainWindow.Instance.LoadScheme(); + UpdateStep(50, "正在连接相机", true); + MainWindow.Instance.ConnectCamera(); + UpdateStep(70, "正在连接PLC", true); + MainWindow.Instance.ConnectPLC(); + UpdateStep(80, "正在加载算法模型", true); + MainWindow.Instance.InitModel(); + UpdateStep(100, "程序初始化完成", true); + Thread.Sleep(100); + WelcomeWindow.Instance.Close(); + // 启动主窗口 + Application.Run(MainWindow.Instance); } // 捕获UI线程中的未处理异常 @@ -42,5 +63,22 @@ namespace DHSoftware { AntdUI.Notification.error(mainWindow, "未处理的非UI线程异常", e.ToString(), autoClose: 3, align: AntdUI.TAlignFrom.TR); } + + //更新进度 + internal static void UpdateStep(int percentValue, string stepMsg, bool succeed) + { + try + { + WelcomeWindow.Instance.bar_step.Value = percentValue; + WelcomeWindow.Instance.lbl_step.Text = stepMsg + "......"; + Thread.Sleep(200); + Application.DoEvents(); + } + catch (Exception ex) + { + } + } + + } } diff --git a/DHSoftware/Utils/DataBaseUtil.cs b/DHSoftware/Utils/DataBaseUtil.cs index ab624ea..bc048cc 100644 --- a/DHSoftware/Utils/DataBaseUtil.cs +++ b/DHSoftware/Utils/DataBaseUtil.cs @@ -21,17 +21,23 @@ namespace DHSoftware.Utils EnsureDirectoryExists(); using (var db = GetDatabase()) { - // 创建所有表 - db.CodeFirst.InitTables( - typeof(User), - typeof(Role), - typeof(Permission), - typeof(UserRole), - typeof(RolePermission) - ); + // 检查初始化状态(通过检查是否存在系统表) + bool isInitialized = db.DbMaintenance.IsAnyTable("RolePermission"); - // 初始化基础数据 - InitializeSeedData(db); + if (!isInitialized) + { + // 创建所有表 + db.CodeFirst.InitTables( + typeof(User), + typeof(Role), + typeof(Permission), + typeof(UserRole), + typeof(RolePermission) + ); + + // 初始化基础数据 + InitializeSeedData(db); + } } } diff --git a/DHSoftware/Views/CloseWindow.Designer.cs b/DHSoftware/Views/CloseWindow.Designer.cs new file mode 100644 index 0000000..c8874ea --- /dev/null +++ b/DHSoftware/Views/CloseWindow.Designer.cs @@ -0,0 +1,102 @@ + +namespace DHSoftware.Views +{ + partial class CloseWindow + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CloseWindow)); + panel1 = new AntdUI.Panel(); + panel2 = new AntdUI.Panel(); + spin1 = new AntdUI.Spin(); + panel1.SuspendLayout(); + panel2.SuspendLayout(); + SuspendLayout(); + // + // panel1 + // + panel1.Back = Color.Transparent; + panel1.Controls.Add(panel2); + panel1.Dock = DockStyle.Fill; + panel1.Location = new Point(0, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(280, 124); + panel1.TabIndex = 0; + panel1.Text = "panel1"; + // + // panel2 + // + panel2.Back = Color.Transparent; + panel2.Controls.Add(spin1); + panel2.Dock = DockStyle.Fill; + panel2.Location = new Point(0, 0); + panel2.Name = "panel2"; + panel2.Radius = 0; + panel2.Size = new Size(280, 124); + panel2.TabIndex = 4; + panel2.Text = "panel2"; + // + // spin1 + // + spin1.Fill = SystemColors.Window; + spin1.Font = new Font("Microsoft YaHei UI", 10.5F, FontStyle.Regular, GraphicsUnit.Point, 134); + spin1.ForeColor = SystemColors.Window; + spin1.Location = new Point(50, 20); + spin1.Name = "spin1"; + spin1.Size = new Size(170, 92); + spin1.TabIndex = 0; + spin1.Text = "软件正在关闭,请稍候......"; + // + // CloseWindow + // + AutoScaleDimensions = new SizeF(7F, 17F); + AutoScaleMode = AutoScaleMode.Font; + BackColor = Color.FromArgb(46, 108, 227); + ClientSize = new Size(280, 124); + ControlBox = false; + Controls.Add(panel1); + Icon = (Icon)resources.GetObject("$this.Icon"); + MaximizeBox = false; + MinimizeBox = false; + Name = "CloseWindow"; + ShowIcon = false; + StartPosition = FormStartPosition.CenterScreen; + Text = "WelcomeForm"; + panel1.ResumeLayout(false); + panel2.ResumeLayout(false); + ResumeLayout(false); + } + + + + #endregion + + private AntdUI.Panel panel1; + private AntdUI.Panel panel2; + private AntdUI.Spin spin1; + } +} \ No newline at end of file diff --git a/DHSoftware/Views/CloseWindow.cs b/DHSoftware/Views/CloseWindow.cs new file mode 100644 index 0000000..7a00271 --- /dev/null +++ b/DHSoftware/Views/CloseWindow.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using AntdUI; +namespace DHSoftware.Views +{ + public partial class CloseWindow : Window + { + public CloseWindow() + { + InitializeComponent(); + Control.CheckForIllegalCrossThreadCalls = false; + } + + /// + /// 窗体对象实例 + /// + private static CloseWindow _instance; + public static CloseWindow Instance + { + get + { + if (_instance == null) + { + _instance = new CloseWindow(); + } + return _instance; + } + } + + } +} diff --git a/DHSoftware/Views/CloseWindow.resx b/DHSoftware/Views/CloseWindow.resx new file mode 100644 index 0000000..97a5e62 --- /dev/null +++ b/DHSoftware/Views/CloseWindow.resx @@ -0,0 +1,382 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + AAE+w7t4QMS7/EDEu/9AxLv/QMS7/0DEu/9AxLv/QMS7/0DEu/9AxLv/QMS7/0DEu/9ivI//s6kr/7yn + H/+8px//vKcf/7ynH/+rqzT/T8Co/0DEu/9AxLv/QMS7/0DEu/9AxLv/QMS7/0DEu/9AxLv/QMS7/0DE + u/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px/NuqcdGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAE+w7t4QMS7/EDEu/9AxLv/QMS7/0DEu/9AxLv/QMS7/0DEu/9AxLv/QMS7/0DE + u/9cvZj/sKot/7ynH/+8px//vKcf/7ynH/+xqi7/UcCm/0DEu/9AxLv/QMS7/0DEu/9AxLv/QMS7/0DE + u/9AxLv/QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px/NuqcdGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE+w7t4QMS7/EDEu/9AxLv/QMS7/0DEu/9AxLv/QMS7/0DE + u/9AxLv/QMS7/0DEu/9bvZj/sKou/7ynH/+8px//vKcf/7ynH/+xqi3/UcCl/0DEu/9AxLv/QMS7/0DE + u/9AxLv/QMS7/0DEu/9AxLv/QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px/NuqcdGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE+w7t4QMS7/EDEu/9AxLv/QMS7/z/E + u7E/w7qNP8O6jT/Duo0/w7qNP8O6jT/Duo1wuH2wtqgm+LynH/+8px//vKcf/7ynH/+0qSntWb6cmj/D + uo0/w7qNP8O6jT/Duo0/w7qNP8O6jT/Eu5Y/xLvhQMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7yn + H/+8px/NuqcdGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE+w7t4QMS7/EDE + u/9AxLv/QMS7/0HEvlIzzMwFM8zMBTPMzAUzzMwFM8zMBTPMzAW4qCRku6cf9bynH/+8px//vKcf/7yn + H/+8pyDKp6c1HTPMzAUzzMwFM8zMBTPMzAUzzMwFM8zMBUDKvxhAxbu8QMS7/0DEu/9AxLv/QMS837yn + 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 + H/+8px/NuqcdGgAAAAD/gAACwqoYFbqoHUa9pR+DvaYewbyoH+G9qB/yvKcf/rynH/+8px//vKcf/7yn + H/+8px//vKcf/7ynH/+8px//vKcf/rumH5q7qiIegIAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DEu/9AxLv/QMS837yn + H/+8px//vKcf/7ynH/+7px/tu6gftbunH8i9px/nu6cf/bynH/+8px//vKcf/7ynH/+8px//vKcf/7yn + H/+8px//vKcf/7ynH/+8px//vKcf/7yoH/i8px/OvqcdTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DE + u/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px//vKcf/7yn + H/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px/6vKgfx7ymH3K7qhoeAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/ + vxQ/w7u7QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px//vKcf/7yn + H/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px//vKgf/ryoH828pR9buqcdGv+AAAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px//vKcf/7yn + H/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px/8vKgf8LynH927px+muaYfQv//AAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7yn + H/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px70u6cf1rymH6+9px+DvKceVL+nICD/gAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DEu/9AxLv/QMS837yn + H+y8px/3u6Yf+bymH++8px7kvacf172nH8C8px6jvqcffb2qH1G3piEuuacaHb+fIBC/vwAEAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DE + u/9AxLv/QMS83wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/DHSoftware/Views/SettingWindow.cs b/DHSoftware/Views/SettingWindow.cs index 77d33f6..35b584c 100644 --- a/DHSoftware/Views/SettingWindow.cs +++ b/DHSoftware/Views/SettingWindow.cs @@ -19,7 +19,19 @@ namespace DHSoftware.Views InitData(); } - + /// + /// 窗体对象实例 + /// + private static SettingWindow _instance; + internal static SettingWindow Instance + { + get + { + if (_instance == null || _instance.IsDisposed) + _instance = new SettingWindow(); + return _instance; + } + } private void BindEventHandler() { Resize += SettingWindow1_Resize; diff --git a/DHSoftware/Views/WelcomeWindow.Designer.cs b/DHSoftware/Views/WelcomeWindow.Designer.cs index 5f1c7c2..c73290b 100644 --- a/DHSoftware/Views/WelcomeWindow.Designer.cs +++ b/DHSoftware/Views/WelcomeWindow.Designer.cs @@ -34,8 +34,8 @@ namespace DHSoftware.Views panel2 = new AntdUI.Panel(); spin1 = new AntdUI.Spin(); panel3 = new AntdUI.Panel(); - progressBar1 = new ProgressBar(); - label1 = new AntdUI.Label(); + bar_step = new ProgressBar(); + lbl_step = new AntdUI.Label(); titlebar = new AntdUI.PageHeader(); panel1.SuspendLayout(); panel2.SuspendLayout(); @@ -81,8 +81,8 @@ namespace DHSoftware.Views // panel3 // panel3.Back = Color.Transparent; - panel3.Controls.Add(progressBar1); - panel3.Controls.Add(label1); + panel3.Controls.Add(bar_step); + panel3.Controls.Add(lbl_step); panel3.Dock = DockStyle.Bottom; panel3.Location = new Point(0, 309); panel3.Name = "panel3"; @@ -91,27 +91,27 @@ namespace DHSoftware.Views panel3.TabIndex = 3; panel3.Text = "panel3"; // - // progressBar1 + // bar_step // - progressBar1.Dock = DockStyle.Bottom; - progressBar1.Location = new Point(0, 54); - progressBar1.Name = "progressBar1"; - progressBar1.Size = new Size(646, 12); - progressBar1.TabIndex = 1; + bar_step.Dock = DockStyle.Bottom; + bar_step.Location = new Point(0, 54); + bar_step.Name = "bar_step"; + bar_step.Size = new Size(646, 12); + bar_step.TabIndex = 1; // - // label1 + // lbl_step // - label1.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134); - label1.ForeColor = SystemColors.Window; - label1.Location = new Point(24, 15); - label1.Name = "label1"; - label1.Size = new Size(590, 33); - label1.TabIndex = 0; - label1.Text = "正在初始化..."; + lbl_step.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134); + lbl_step.ForeColor = SystemColors.Window; + lbl_step.Location = new Point(24, 15); + lbl_step.Name = "lbl_step"; + lbl_step.Size = new Size(590, 33); + lbl_step.TabIndex = 0; + lbl_step.Text = "正在初始化..."; // // titlebar // - titlebar.BackColor = SystemColors.MenuHighlight; + titlebar.BackColor = Color.FromArgb(46, 108, 227); titlebar.DividerShow = true; titlebar.DividerThickness = 0F; titlebar.Dock = DockStyle.Top; @@ -132,7 +132,7 @@ namespace DHSoftware.Views // AutoScaleDimensions = new SizeF(7F, 17F); AutoScaleMode = AutoScaleMode.Font; - BackColor = SystemColors.MenuHighlight; + BackColor = Color.FromArgb(46, 108, 227); ClientSize = new Size(646, 375); ControlBox = false; Controls.Add(panel1); @@ -158,7 +158,7 @@ namespace DHSoftware.Views private AntdUI.Panel panel3; private AntdUI.Panel panel2; private AntdUI.Spin spin1; - private AntdUI.Label label1; - private ProgressBar progressBar1; + public AntdUI.Label lbl_step; + public ProgressBar bar_step; } } \ No newline at end of file diff --git a/DHSoftware/Views/WelcomeWindow.cs b/DHSoftware/Views/WelcomeWindow.cs index cfd7dbd..6bea70f 100644 --- a/DHSoftware/Views/WelcomeWindow.cs +++ b/DHSoftware/Views/WelcomeWindow.cs @@ -15,9 +15,22 @@ namespace DHSoftware.Views public WelcomeWindow() { InitializeComponent(); - - - + Control.CheckForIllegalCrossThreadCalls = false; } + + /// + /// 窗体对象实例 + /// + private static WelcomeWindow _instance; + internal static WelcomeWindow Instance + { + get + { + if (_instance == null) + _instance = new WelcomeWindow(); + return _instance; + } + } + } }