Files
FootwearTest-20260602/Footwear Test methodsfor wholeshoe Slipresistanceperformance/App.axaml.cs

106 lines
3.6 KiB
C#
Raw Normal View History

2026-06-02 17:41:53 +08:00
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Data.Core;
using Avalonia.Data.Core.Plugins;
using Avalonia.Markup.Xaml;
using Footwear_Test_methodsfor_wholeshoe_Slipresistanceperformance.ViewModels;
using Footwear_Test_methodsfor_wholeshoe_Slipresistanceperformance.Views;
2026-06-15 10:28:16 +08:00
using Footwear_Test_methodsfor_wholeshoe_Slipresistanceperformance.Services;
2026-06-02 18:45:14 +08:00
using Serilog;
using System;
2026-06-02 17:41:53 +08:00
using System.Linq;
2026-06-02 18:45:14 +08:00
using System.Threading.Tasks;
2026-06-02 17:41:53 +08:00
namespace Footwear_Test_methodsfor_wholeshoe_Slipresistanceperformance
{
public partial class App : Application
{
2026-06-02 18:45:14 +08:00
private static bool exceptionHandlersRegistered;
2026-06-15 10:28:16 +08:00
private readonly MachineLicenseService licenseService = new();
2026-06-02 18:45:14 +08:00
2026-06-02 17:41:53 +08:00
public override void Initialize()
{
AvaloniaXamlLoader.Load(this);
}
public override void OnFrameworkInitializationCompleted()
{
2026-06-02 18:45:14 +08:00
RegisterExceptionHandlers();
2026-06-02 17:41:53 +08:00
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
2026-06-15 10:28:16 +08:00
var check = licenseService.Check(updateHeartbeat: true);
if (check.CanUseSoftware)
2026-06-02 17:41:53 +08:00
{
2026-06-15 10:28:16 +08:00
ShowMainWindow(desktop, showImmediately: false);
}
else
{
var mode = check.State switch
{
Models.LicenseCheckState.NotInitialized => LicenseWindowMode.Initialization,
Models.LicenseCheckState.Expired => LicenseWindowMode.Unlock,
_ => LicenseWindowMode.Blocked
};
var licenseWindow = new LicenseWindow(licenseService, mode, check.Message);
desktop.MainWindow = licenseWindow;
licenseWindow.Closed += (_, _) =>
{
if (licenseWindow.Succeeded)
{
ShowMainWindow(desktop, showImmediately: true);
}
else
{
desktop.Shutdown();
}
};
}
2026-06-02 17:41:53 +08:00
}
base.OnFrameworkInitializationCompleted();
}
2026-06-02 18:45:14 +08:00
2026-06-15 10:28:16 +08:00
private void ShowMainWindow(IClassicDesktopStyleApplicationLifetime desktop, bool showImmediately)
{
var viewModel = new MainWindowViewModel(licenseService);
desktop.MainWindow = new MainWindow(licenseService)
{
DataContext = viewModel,
};
if (showImmediately)
{
desktop.MainWindow.Show();
}
}
2026-06-02 18:45:14 +08:00
private static void RegisterExceptionHandlers()
{
if (exceptionHandlersRegistered)
{
return;
}
AppDomain.CurrentDomain.UnhandledException += (_, args) =>
{
if (args.ExceptionObject is Exception exception)
{
Log.Fatal(exception, "捕获到 AppDomain 未处理异常IsTerminating={IsTerminating}", args.IsTerminating);
}
else
{
Log.Fatal("捕获到 AppDomain 未处理异常:{ExceptionObject}", args.ExceptionObject);
}
};
TaskScheduler.UnobservedTaskException += (_, args) =>
{
Log.Error(args.Exception, "捕获到未观察的后台任务异常");
args.SetObserved();
};
exceptionHandlersRegistered = true;
}
2026-06-02 17:41:53 +08:00
}
2026-06-02 18:45:14 +08:00
}