|
|
|
@ -5,11 +5,15 @@ using System.Windows; |
|
|
|
using MultiTerm.Core.Helpers; |
|
|
|
using MultiTerm.Core.Helpers; |
|
|
|
using Common.Logging; |
|
|
|
using Common.Logging; |
|
|
|
using Common.Logger; |
|
|
|
using Common.Logger; |
|
|
|
|
|
|
|
using System; |
|
|
|
|
|
|
|
using System.Threading.Tasks; |
|
|
|
|
|
|
|
|
|
|
|
namespace MultiTerm.Wpf; |
|
|
|
namespace MultiTerm.Wpf; |
|
|
|
|
|
|
|
|
|
|
|
public partial class App : Application |
|
|
|
public partial class App : Application |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
private static ILogger? logger; |
|
|
|
|
|
|
|
|
|
|
|
public static IHost? AppHost { get; private set; } |
|
|
|
public static IHost? AppHost { get; private set; } |
|
|
|
|
|
|
|
|
|
|
|
public App() |
|
|
|
public App() |
|
|
|
@ -35,10 +39,15 @@ public partial class App : Application |
|
|
|
await AppHost!.StartAsync(); |
|
|
|
await AppHost!.StartAsync(); |
|
|
|
|
|
|
|
|
|
|
|
// create logger and initialize |
|
|
|
// create logger and initialize |
|
|
|
var logger = AppHost.Services.GetRequiredService<ILogger>(); |
|
|
|
logger = AppHost.Services.GetRequiredService<ILogger>(); |
|
|
|
logger.Initialize(LogLevel.Trace); |
|
|
|
logger.Initialize(LogLevel.Trace); |
|
|
|
logger.LogInfo("Application started.", nameof(App)); |
|
|
|
logger.LogInfo("Application started.", nameof(App)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// register handlers to some hidden exception types |
|
|
|
|
|
|
|
AppDomain.CurrentDomain.UnhandledException += this.AppDomain_UnhandledException; |
|
|
|
|
|
|
|
Application.Current.DispatcherUnhandledException += this.Application_DispatcherUnhandledException; |
|
|
|
|
|
|
|
TaskScheduler.UnobservedTaskException += this.TaskScheduler_UnobservedTaskException; |
|
|
|
|
|
|
|
|
|
|
|
// instanciate startup form and show |
|
|
|
// instanciate startup form and show |
|
|
|
var startupForm = AppHost.Services.GetRequiredService<MainWindow>(); |
|
|
|
var startupForm = AppHost.Services.GetRequiredService<MainWindow>(); |
|
|
|
startupForm.Show(); |
|
|
|
startupForm.Show(); |
|
|
|
@ -49,7 +58,6 @@ public partial class App : Application |
|
|
|
protected override async void OnExit(ExitEventArgs e) |
|
|
|
protected override async void OnExit(ExitEventArgs e) |
|
|
|
{ |
|
|
|
{ |
|
|
|
// log application exit and stop logger (if still available) |
|
|
|
// log application exit and stop logger (if still available) |
|
|
|
var logger = AppHost!.Services.GetRequiredService<ILogger>(); |
|
|
|
|
|
|
|
logger?.LogInfo("Application exited.", nameof(App)); |
|
|
|
logger?.LogInfo("Application exited.", nameof(App)); |
|
|
|
logger?.StopLogging(); |
|
|
|
logger?.StopLogging(); |
|
|
|
|
|
|
|
|
|
|
|
@ -57,4 +65,20 @@ public partial class App : Application |
|
|
|
base.OnExit(e); |
|
|
|
base.OnExit(e); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#region Event handlers for hidden exceptions |
|
|
|
|
|
|
|
private void AppDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
logger?.LogException((Exception)e.ExceptionObject, "AppDomain UnhandledException caught", nameof(App)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
logger?.LogException(e.Exception, "Application DispatcherUnhandledException caught", nameof(App)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void TaskScheduler_UnobservedTaskException(object? sender, UnobservedTaskExceptionEventArgs e) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
logger?.LogException(e.Exception, "TaskScheduler UnobservedTaskException caught", nameof(App)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
#endregion |
|
|
|
} |
|
|
|
} |
|
|
|
|