Files
EbayListingTool/EbayListingTool/App.xaml.cs

68 lines
2.4 KiB
C#

using System.Threading.Tasks;
using System.Windows;
using System.Windows.Threading;
using Microsoft.Extensions.Configuration;
namespace EbayListingTool;
public partial class App : Application
{
public static IConfiguration Configuration { get; private set; } = null!;
protected override void OnStartup(StartupEventArgs e)
{
// Global handler for unhandled exceptions on the UI thread
DispatcherUnhandledException += OnDispatcherUnhandledException;
// Global handler for unhandled exceptions on background Task threads
TaskScheduler.UnobservedTaskException += OnUnobservedTaskException;
// Global handler for unhandled exceptions on non-UI threads
AppDomain.CurrentDomain.UnhandledException += OnDomainUnhandledException;
Configuration = new ConfigurationBuilder()
.SetBasePath(AppContext.BaseDirectory)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: false)
.AddJsonFile("appsettings.local.json", optional: true, reloadOnChange: false)
.Build();
base.OnStartup(e);
}
private void OnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
MessageBox.Show(
$"An unexpected error occurred:\n\n{e.Exception.Message}",
"Unexpected Error",
MessageBoxButton.OK,
MessageBoxImage.Error);
e.Handled = true; // Prevent crash; remove this line if you want fatal errors to still terminate
}
private void OnUnobservedTaskException(object? sender, UnobservedTaskExceptionEventArgs e)
{
e.SetObserved();
Dispatcher.InvokeAsync(() =>
{
MessageBox.Show(
$"A background operation failed:\n\n{e.Exception.InnerException?.Message ?? e.Exception.Message}",
"Background Error",
MessageBoxButton.OK,
MessageBoxImage.Warning);
});
}
private void OnDomainUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
var message = e.ExceptionObject is Exception ex
? ex.Message
: e.ExceptionObject?.ToString() ?? "Unknown error";
MessageBox.Show(
$"A fatal error occurred and the application must close:\n\n{message}",
"Fatal Error",
MessageBoxButton.OK,
MessageBoxImage.Error);
}
}