From ba6207f52db76ab47cd6534de0cf1712674ff179 Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期四, 13 三月 2025 09:00:46 +0800
Subject: [PATCH] 完善国际化语言;

---
 HMI.Base/PluginLoader.cs |   73 ++++++++++++++++++++++++++++++------
 1 files changed, 61 insertions(+), 12 deletions(-)

diff --git a/HMI.Base/PluginLoader.cs b/HMI.Base/PluginLoader.cs
index fc082bd..eef52ba 100644
--- a/HMI.Base/PluginLoader.cs
+++ b/HMI.Base/PluginLoader.cs
@@ -8,15 +8,27 @@
 using System.IO;
 using System.Reflection;
 using System.Threading;
-using System.Threading.Tasks;
 using System.Windows;
-using System.Windows.Media.Imaging;
 using System.Windows.Threading;
 
 namespace HMI.Base
 {
+    public enum LoadMsgType
+    {
+        INIT, LOADING, FINISHED
+    }
+
+    public class LoadMsg
+    {
+        public string Message { get; set; }
+        public bool? Result { get; set; }
+        public LoadMsgType Type { get; set; }
+        public int NumData { get; set; }
+    }
+
     public class PluginLoader
     {
+        private static ILog log = LogManager.GetLogger("PluginLoader");
         private static string PluginFolder = PathHelper.PluginFolder();
 
         public bool Completed { get; private set; } = false;
@@ -25,8 +37,7 @@
         public List<PluginInfo> Plugins { get; private set; }
         public static PluginLoader Instance { get; private set; }
 
-        public event EventHandler<string> LoadMessageAppend;
-        public event EventHandler Loaded;
+        public event EventHandler<LoadMsg> LoadMessageAppend;
 
         private PluginLoader()
         {
@@ -48,13 +59,20 @@
             {
                 Plugins = new List<PluginInfo>();
                 Menus = LoadTreeMenu(dispatcher);
-                Loaded?.Invoke(this, null);
+                dispatcher.Invoke(() =>
+                {
+                    LoadMessageAppend?.Invoke(this, new LoadMsg { Type = LoadMsgType.FINISHED });
+                });
             }
         }
 
         private void LoadChildrenMenu(PluginInfo menu, Dispatcher dispatcher)
         {
-            LoadMessageAppend?.Invoke(this, $"姝e湪鍔犺浇{menu.Name}鑿滃崟...");
+            LoadMessageAppend?.Invoke(this, new LoadMsg
+            {
+                Type = LoadMsgType.LOADING,
+                Message = $"姝e湪鍔犺浇{menu.Name}鑿滃崟..."
+            });
             try
             {
                 Application.Current.Dispatcher.Invoke(() =>
@@ -89,7 +107,13 @@
             }
             catch (Exception ex)
             {
-                LoadMessageAppend?.Invoke(this, $"{ex.Message} {ex.StackTrace}");
+                LoadMessageAppend?.Invoke(this,
+                     new LoadMsg
+                     {
+                         Type = LoadMsgType.LOADING,
+                         Result = false,
+                         Message = $"{ex.Message} {ex.StackTrace}"
+                     });
             }
         }
 
@@ -98,13 +122,19 @@
             foreach (var menu in Plugins)
             {
                 CountdownEvent c = new CountdownEvent(1);
-                Thread.Sleep(10);
+                Thread.Sleep(100);
                 Application.Current.Dispatcher.Invoke(new Action(() =>
                 {
 
                     try
                     {
-                        LoadMessageAppend?.Invoke(this, $"姝e湪鍔犺浇{menu.Name}鑿滃崟...");
+                        LoadMessageAppend?.Invoke(this,
+                            new LoadMsg
+                            {
+                                Type = LoadMsgType.LOADING,
+                                Message = this.lang("App.IsLoadingMenu", menu.Name)
+                            }
+                        );
                         if (!string.IsNullOrEmpty(menu.DllPath))
                         {
                             string dllPath = Path.Combine(PluginFolder, menu.DllPath);
@@ -134,11 +164,23 @@
                                 }
                             }
                         }
-                        LoadMessageAppend?.Invoke(this, $"鍔犺浇瀹�");
+                        LoadMessageAppend?.Invoke(this,
+                            new LoadMsg
+                            {
+                                Type = LoadMsgType.LOADING,
+                                Result = true,
+                                Message = this.lang("App.MenuLoadSuccess", menu.Name),
+                            });
                     }
                     catch (Exception ex)
                     {
-                        LoadMessageAppend?.Invoke(this, $"{ex.Message} {ex.StackTrace}");
+                        log.Error("Load Plugin Failed.", ex);
+                        LoadMessageAppend?.Invoke(this, new LoadMsg
+                        {
+                            Type = LoadMsgType.LOADING,
+                            Result = false,
+                            Message = this.lang("App.MenuLoadFailed", menu.Name, ex.Message, ex.StackTrace)
+                        });
                     }
                     finally
                     {
@@ -165,9 +207,16 @@
                 DataTable dt = sqliteHelper.GetDataTable(sql);
                 if (dt != null)
                 {
-                    //LoadMessageAppend?.Invoke(this, $"鍏辨湁{dt.Rows.Count}鏉¤彍鍗曞緟鍔犺浇...");
                     Application.Current.Dispatcher.Invoke(() =>
                     {
+                        LoadMessageAppend?.Invoke(this,
+                          new LoadMsg
+                          {
+                              Type = LoadMsgType.INIT,
+                              NumData = dt.Rows.Count,
+                              Message = this.lang("App.MenuCount", dt.Rows.Count),
+                          });
+
                         foreach (DataRow dr in dt.Rows)
                         {
                             string path = Path.Combine(PathHelper.IconFolder, dr["iconPath"].ToString());

--
Gitblit v1.9.1