From ef52fd6fd07508883dce4eb002acda59f0169e59 Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期四, 23 四月 2026 10:19:33 +0800
Subject: [PATCH] 优化;

---
 WPFProject/LoadingWindow.xaml.cs |  126 ++++++++++++++++++++++++++++++++++--------
 1 files changed, 102 insertions(+), 24 deletions(-)

diff --git a/WPFProject/LoadingWindow.xaml.cs b/WPFProject/LoadingWindow.xaml.cs
index b929c03..3ef9eb7 100644
--- a/WPFProject/LoadingWindow.xaml.cs
+++ b/WPFProject/LoadingWindow.xaml.cs
@@ -1,9 +1,17 @@
 锘縰sing HMI.Base;
+using HMI.Core.Entity;
+using HMI.Core.Setting;
+using HMI.Core.Util;
+using HMI.UI.Util;
+using HMI.Util.Alarm;
 using Panuon.WPF.UI;
 using System;
+using System.IO;
 using System.Threading.Tasks;
 using System.Windows;
 using System.Windows.Documents;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
 
 namespace WPFProject
 {
@@ -13,71 +21,142 @@
     public partial class LoadingWindow : WindowX
     {
 
-        private string consoleText = "";
+        private string message = "";
 
-        public string ConsoleText
+        public string Message
         {
-            get { return consoleText; }
-            set { Set(ref consoleText, value); }
+            get { return message; }
+            set { Set(ref message, value); }
+        }
+
+        private bool HasErr = false;
+
+        private bool showConsole = false;
+        public bool ShowConsole
+        {
+            get => showConsole;
+            set
+            {
+                Set(ref showConsole, value);
+                NotifyOfPropertyChange("ConsoleVisiable");
+                NotifyOfPropertyChange("BarVisiable");
+            }
+        }
+
+        public Visibility ConsoleVisiable
+        {
+            get => showConsole ? Visibility.Visible : Visibility.Collapsed;
+        }
+
+        public Visibility BarVisiable
+        {
+            get => showConsole ? Visibility.Collapsed : Visibility.Visible;
         }
 
         public LoadingWindow()
         {
             DataContext = this;
             InitializeComponent();
+            logo.Source = new BitmapImage(new Uri(Path.Combine(PathHelper.IconFolder,
+                     SystemSetting.Instance.LoginLogoPath ?? "LoginLogo.png")));
         }
 
         private void Window_Loaded(object sender, RoutedEventArgs e)
         {
-            
+
         }
-        private void Loader_LoadMessageAppend(object sender, string e)
+        private void Loader_LoadMessageAppend(object sender, LoadMsg msg)
         {
-            Add(e);
+            Dispatcher.BeginInvoke(() =>
+            {
+                switch (msg.Type)
+                {
+                    case LoadMsgType.INIT:
+                        total = msg.NumData;
+                        Add(msg.Message, msg.Result);
+                        break;
+                    case LoadMsgType.LOADING:
+                        HasErr = HasErr || msg.Result == false;
+                        if (msg.Result != null)
+                        {
+                            processBar.Value = ++finished / total * 100;
+                        }
+                        Add(msg.Message, msg.Result);
+                        break;
+                    case LoadMsgType.FINISHED:
+                        LoadFinished();
+                        break;
+                    default:
+                        break;
+                }
+
+            });
         }
 
 
         private void Button_Click(object sender, RoutedEventArgs e)
         {
-            PanuonWindow window = new PanuonWindow();
+            this.Closed -= ShutDownWhen_Closed;
             window.Show();
             this.Close();
         }
 
+        private PanuonWindow window;
+        private double total;
+        private double finished;
+
         private void WindowX_ContentRendered(object sender, System.EventArgs e)
         {
+            window = new PanuonWindow();
             PluginLoader loader = PluginLoader.GetLoader();
             loader.LoadMessageAppend += Loader_LoadMessageAppend;
-            loader.Loaded += Loader_Loaded;
+            AlarmUtil.LoadMessageAppend += Loader_LoadMessageAppend;
             Task.Run(() =>
             {
-                loader.LoadMenuAndPlugin(Dispatcher);
+                AlarmUtil.Init();
+                loader.LoadMenuAndPlugin(window, Dispatcher);
                 //
             });
         }
 
-        private void Loader_Loaded(object sender, EventArgs e)
+        private void LoadFinished()
         {
-            Dispatcher.Invoke(() =>
+            if (!HasErr)
             {
                 Button_Click(null, null);
-            });
+            }
+            else
+            {
+                WindowXCaption.SetButtons(this, CaptionButtons.Close);
+                ShowConsole = true;
+                BtnNext.Visibility = Visibility.Visible;
+                MsgBoxHelper.Error(this, this.lang("App.LoadPluginError"));
+                this.Closed += ShutDownWhen_Closed; ;
+            }
         }
 
-        public void Add(string text)
+        private void ShutDownWhen_Closed(object sender, EventArgs e)
         {
-            string t = string.Format("{0:G}", DateTime.Now);
-            Run run = new Run();
-            run.Text = t + " 淇℃伅锛�" + text;
-            //run.Foreground = new Brush();
+            Application.Current.Shutdown();
+        }
 
-            Paragraph paragraph = new Paragraph(run) {
-                LineHeight =1
+        public void Add(string text, bool? result)
+        {
+            Message = text;
+            string time = string.Format("{0:G}", DateTime.Now);
+            Run run = new Run();
+            string type = result != false ? "Info" : "Warn";
+            run.Text = $"{time} {type} {text}";
+            run.Foreground = result == null ? Brushes.Black : (result == true ? Brushes.Green : Brushes.Red);
+
+            Paragraph paragraph = new Paragraph(run)
+            {
+                LineHeight = 1
             };
-            //rtxtLog.Document.Blocks.InsertAfter(); ;
-            //鎻掑叆鍒版渶鍓嶉潰
-            Console.Document.Blocks.InsertAfter(Console.Document.Blocks.LastBlock, paragraph);
             //涔熷彲浠ユ彃鍏ュ埌鏈�鍚庨潰
+            Console.Document.Blocks.InsertAfter(Console.Document.Blocks.LastBlock, paragraph);
+
+            //鎻掑叆鍒版渶鍓嶉潰
             //rtxtLog.Document.Blocks.Add(paragraph);
 
             // 婊氬姩鑷虫渶鍚庤
@@ -92,7 +171,6 @@
             //        _ = Console.Document.Blocks.Remove(Console.Document.Blocks.FirstBlock);
             //    }
             //}
-
         }
     }
 }

--
Gitblit v1.9.1