From a3ba25607612818c28d421bfa8eb2f92339d71ac Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期四, 13 三月 2025 20:30:48 +0800
Subject: [PATCH] 优化项目;

---
 WPFProject/LoadingWindow.xaml.cs |  140 +++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 129 insertions(+), 11 deletions(-)

diff --git a/WPFProject/LoadingWindow.xaml.cs b/WPFProject/LoadingWindow.xaml.cs
index a9755db..e9d50a4 100644
--- a/WPFProject/LoadingWindow.xaml.cs
+++ b/WPFProject/LoadingWindow.xaml.cs
@@ -1,30 +1,85 @@
-锘縰sing System.Windows;
-using HMI.Base;
+锘縰sing HMI.Base;
+using HMI.UI.Util;
+using Panuon.WPF.UI;
+using System;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Documents;
+using System.Windows.Media;
 
 namespace WPFProject
 {
     /// <summary>
     /// LoadingWindow.xaml 鐨勪氦浜掗�昏緫
     /// </summary>
-    public partial class LoadingWindow : Window
+    public partial class LoadingWindow : WindowX
     {
+
+        private string message = "";
+
+        public string Message
+        {
+            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();
         }
 
         private void Window_Loaded(object sender, RoutedEventArgs e)
         {
-            PluginLoader loader = PluginLoader.GetLoader();
-            loader.LoadMessageAppend += Loader_LoadMessageAppend;
-            loader.LoadMenuAndPlugin();
-            Button_Click(null,null);
+
+        }
+        private void Loader_LoadMessageAppend(object sender, LoadMsg msg)
+        {
+            switch (msg.Type)
+            {
+                case LoadMsgType.INIT:
+                    total = msg.NumData;
+                    Add(msg.Message, null);
+                    break;
+                case LoadMsgType.LOADING:
+                    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 Loader_LoadMessageAppend(object sender, string e)
-        {
-            Console.Text += $"{e}\r\n";
-        }
 
         private void Button_Click(object sender, RoutedEventArgs e)
         {
@@ -32,5 +87,68 @@
             window.Show();
             this.Close();
         }
+
+        private double total;
+        private double finished;
+
+        private void WindowX_ContentRendered(object sender, System.EventArgs e)
+        {
+            PluginLoader loader = PluginLoader.GetLoader();
+            loader.LoadMessageAppend += Loader_LoadMessageAppend;
+            Task.Run(() =>
+            {
+                loader.LoadMenuAndPlugin(Dispatcher);
+                //
+            });
+        }
+
+        private void LoadFinished()
+        {
+            if (!HasErr)
+            {
+                Button_Click(null, null);
+            }
+            else
+            {
+                WindowXCaption.SetButtons(this, CaptionButtons.Close);
+                ShowConsole = true;
+                BtnNext.Visibility = Visibility.Visible;
+                MsgBoxHelper.Error(this, "鍔犺浇鍑洪敊锛岃纭");
+            }
+        }
+
+        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
+            };
+            //涔熷彲浠ユ彃鍏ュ埌鏈�鍚庨潰
+            Console.Document.Blocks.InsertAfter(Console.Document.Blocks.LastBlock, paragraph);
+            
+            //鎻掑叆鍒版渶鍓嶉潰
+            //rtxtLog.Document.Blocks.Add(paragraph);
+
+            // 婊氬姩鑷虫渶鍚庤
+            //rtxtLog.ScrollToEnd();
+            //Console.ScrollToHome();
+            Console.ScrollToEnd();
+            // 鍒犻櫎
+            //if (Console.Document.Blocks.Count > 10000)
+            //{
+            //    for (int i = 1000; i < Console.Document.Blocks.Count; i++)
+            //    {
+            //        _ = Console.Document.Blocks.Remove(Console.Document.Blocks.FirstBlock);
+            //    }
+            //}
+
+        }
     }
 }

--
Gitblit v1.9.1