using Microsoft.Win32; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Linq; using System.Threading.Tasks; using System.Windows; using System.Windows.Threading; namespace TouchCashier { /// /// App.xaml 的交互逻辑 /// public partial class App : Application { System.Threading.Mutex mutex; public App() { //主线程非预期异常处理事件,记录异常日志,重启应用程序 DispatcherUnhandledException += new DispatcherUnhandledExceptionEventHandler(App_DispatcherUnhandledException); //子线程非预期异常处理事件,记录异常日志 AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); //系统正在关机或注销时事件,记录关闭信息 SystemEvents.SessionEnding += new SessionEndingEventHandler(SystemEvents_SessionEnding); //程序运行事件 Startup += new StartupEventHandler(App_Startup); } /// /// 系统关机或注销事件 /// /// /// private void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e) { SessionEndReasons reason = e.Reason; switch (reason) { case SessionEndReasons.Logoff: WorkUtils.PublicStore.LoggerHelper.WriteLogger("Windows正在注销。"); break; case SessionEndReasons.SystemShutdown: WorkUtils.PublicStore.LoggerHelper.WriteLogger("Windows正在关闭。"); break; } } /// /// UI线程异常处理事件 /// /// /// void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e) { WorkUtils.PublicStore.LoggerHelper.WriteLogger($"主线程发生异常,重新启动系统。错误信息:{e.Exception.Message}"); e.Handled = true; try { //重启系统 System.Diagnostics.Process.Start("AutoUpdateEx.exe"); System.Environment.Exit(0); } catch (Exception) { System.Environment.Exit(0); } } /// /// 非UI线程异常处理事件 /// /// /// void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { WorkUtils.PublicStore.LoggerHelper.WriteLogger($"子线程发生异常,重新启动系统。错误信息:{(e.ExceptionObject as Exception).Message}"); try { //重启系统 System.Diagnostics.Process.Start("AutoUpdateEx.exe"); System.Environment.Exit(0); } catch (Exception) { System.Environment.Exit(0); } } /// /// 程序启动处理 /// /// /// void App_Startup(object sender, StartupEventArgs e) { mutex = new System.Threading.Mutex(true, "TouchCashier", out bool ret); if (!ret) { Environment.Exit(0); } else { MainFontSizeChange(); SecondMainFontSizeChange(); MainWindow _MainWindow = new MainWindow(); _MainWindow.Show(); } } /// /// 主屏幕窗口字体大小计算 /// private void MainFontSizeChange() { //超大号字体 double supersize = ((SystemParameters.PrimaryScreenWidth / 6.5) / 3 * 2) / 5; if (supersize < 28) { supersize = 28; } Current.Resources.Remove("SuperFontSize"); Current.Resources.Add("SuperFontSize", supersize); double titlesize = ((SystemParameters.PrimaryScreenWidth / 10) / 3 * 2) / 5; if (titlesize < 18) { titlesize = 18; } Current.Resources.Remove("TitleFontSize"); Current.Resources.Add("TitleFontSize", titlesize); double tabsize = ((SystemParameters.PrimaryScreenWidth / 10) / 3 * 2) / 5 * 0.9; if (tabsize < 16) { tabsize = 16; } Current.Resources.Remove("TabFontSize"); Current.Resources.Add("TabFontSize", tabsize); double gridsize = ((SystemParameters.PrimaryScreenWidth / 10) / 3 * 2) / 5 * 0.8; if (gridsize < 14) { gridsize = 14; } Current.Resources.Remove("GridFontSize"); Current.Resources.Add("GridFontSize", gridsize); double controlsize = ((SystemParameters.PrimaryScreenWidth / 10) / 3 * 2) / 5 * 0.7; if (controlsize < 12) { controlsize = 12; } Current.Resources.Remove("ControlFontSize"); Current.Resources.Add("ControlFontSize", controlsize); } /// /// 副屏幕窗口字体大小计算 /// private void SecondMainFontSizeChange() { double db_ScreenWidth = SystemParameters.PrimaryScreenWidth; if (System.Windows.Forms.Screen.AllScreens.Length > 1) { db_ScreenWidth = System.Windows.Forms.Screen.AllScreens[1].Bounds.Width; } //超大号字体 double supersize = ((db_ScreenWidth / 6.5) / 3 * 2) / 5; if (supersize < 28) { supersize = 28; } Current.Resources.Remove("SecondSuperFontSize"); Current.Resources.Add("SecondSuperFontSize", supersize); double titlesize = ((db_ScreenWidth / 9) / 3 * 2) / 5; if (titlesize < 20) { titlesize = 20; } Current.Resources.Remove("SecondTitleFontSize"); Current.Resources.Add("SecondTitleFontSize", titlesize); double tabsize = ((db_ScreenWidth / 10) / 3 * 2) / 5; if (tabsize < 16) { tabsize = 16; } Current.Resources.Remove("SecondTabFontSize"); Current.Resources.Add("SecondTabFontSize", tabsize); double gridsize = ((db_ScreenWidth / 10) / 3 * 2) / 5 * 0.8; if (gridsize < 14) { gridsize = 14; } Current.Resources.Remove("SecondGridFontSize"); Current.Resources.Add("SecondGridFontSize", gridsize); double controlsize = ((SystemParameters.PrimaryScreenWidth / 10) / 3 * 2) / 5 * 0.7; if (controlsize < 12) { controlsize = 12; } Current.Resources.Remove("SecondControlFontSize"); Current.Resources.Add("SecondControlFontSize", controlsize); } } }