68 lines
2.0 KiB
C#
68 lines
2.0 KiB
C#
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;
|
||
using Serilog;
|
||
using System;
|
||
using System.Linq;
|
||
using System.Threading.Tasks;
|
||
|
||
namespace Footwear_Test_methodsfor_wholeshoe_Slipresistanceperformance
|
||
{
|
||
public partial class App : Application
|
||
{
|
||
private static bool exceptionHandlersRegistered;
|
||
|
||
public override void Initialize()
|
||
{
|
||
AvaloniaXamlLoader.Load(this);
|
||
}
|
||
|
||
public override void OnFrameworkInitializationCompleted()
|
||
{
|
||
RegisterExceptionHandlers();
|
||
|
||
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
||
{
|
||
desktop.MainWindow = new MainWindow
|
||
{
|
||
DataContext = new MainWindowViewModel(),
|
||
};
|
||
}
|
||
|
||
base.OnFrameworkInitializationCompleted();
|
||
}
|
||
|
||
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;
|
||
}
|
||
}
|
||
}
|