using HMI.Core.Setting; using HMI.Core.Util; using HMI.UI.Util; using log4net; using Panuon.WPF.UI; using System; using System.IO; using System.Reflection; using System.Threading; using System.Windows; using WPFProject.Utils; namespace WPFProject { /// /// App.xaml 的交互逻辑 /// public partial class App : Application { private ILog log; public App() { log = LogManager.GetLogger("APP"); AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; } private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { var ex = e.ExceptionObject as Exception; log.Error("UnhandledException.", ex); MsgBoxHelper.ErrorMessage(Current.MainWindow, this.lang("App.AppUnhandledException",ex.Message), this.lang("App.Error"), MessageBoxButton.OK, MessageBoxIcon.Error, DefaultButton.YesOK, 5); } private static Mutex mutex; private void Application_Startup(object sender, StartupEventArgs e) { mutex = new Mutex(true, "TestPlatform_OnlyRun_CRNS"); if (mutex.WaitOne(0, false)) { AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; LangUtil.Load(); SystemSetting.SystemSettingChanged += SystemSetting_SystemSettingChanged; ToastHelper.Register(new MainToastHandler()); //LoadingWindow window = new LoadingWindow(); Login window = new Login(); window.Show(); } else { MessageBox.Show("程序已经在运行!", "提示"); this.Shutdown(); } } private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) { // 获取请求加载的程序集名称 string assemblyName = new AssemblyName(args.Name).Name; string[] dirs = new string[] { "3rds", "Libs" }; foreach (string dir in dirs) { string dllPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, dir, $"{assemblyName}.dll"); if (File.Exists(dllPath)) { // 如果依赖 DLL 存在,则加载并返回它 return Assembly.LoadFrom(dllPath); } } // 否则返回 null return null; } private void SystemSetting_SystemSettingChanged(object sender, SystemSetting e) { LangUtil.LoadLang(); } } }