Review der Codebase
This commit is contained in:
@@ -7,10 +7,10 @@ namespace LehrerApp.Desktop.Services;
|
||||
/// Zentrale Exception-Behandlung (13.2.1): protokolliert jeden unerwarteten Fehler und zeigt
|
||||
/// eine verständliche Meldung statt eines rohen Absturzes.
|
||||
///
|
||||
/// Reichweite ehrlich betrachtet: <see cref="Dispatcher"/>.UIThread.UnhandledException kann
|
||||
/// Ausnahmen aus Befehlen/Ereignis-Handlern auf dem UI-Thread abfangen und die App am Leben
|
||||
/// erhalten (Handled = true) — das deckt den weit überwiegenden Teil realer Abstürze in einer
|
||||
/// Desktop-App ab. AppDomain.UnhandledException und TaskScheduler.UnobservedTaskException sind
|
||||
/// <see cref="Dispatcher"/>.UIThread.UnhandledException fängt Fehler aus Befehlen und
|
||||
/// Ereignis-Handlern ab. Nur erwartbar wiederherstellbare I/O-, Netzwerk-, Timeout- und
|
||||
/// Abbruchfehler werden behandelt; unbekannte Zustandsfehler dürfen die App beenden.
|
||||
/// AppDomain.UnhandledException und TaskScheduler.UnobservedTaskException sind
|
||||
/// Sicherheitsnetze für Fehler außerhalb des UI-Threads; die App kann eine "IsTerminating"-
|
||||
/// Ausnahme dort nicht mehr verhindern, aber wenigstens vollständig protokollieren, bevor sie endet.
|
||||
/// </summary>
|
||||
@@ -36,10 +36,18 @@ public static class GlobalExceptionHandler
|
||||
private static void OnDispatcherUnhandledException(object? sender, DispatcherUnhandledExceptionEventArgs e)
|
||||
{
|
||||
_logger?.Error("Unbehandelter Fehler auf dem UI-Thread.", e.Exception);
|
||||
_notifications?.ShowError("Es ist ein unerwarteter Fehler aufgetreten. Details wurden protokolliert.");
|
||||
e.Handled = true; // App am Leben halten statt abzustürzen.
|
||||
e.Handled = IsRecoverable(e.Exception);
|
||||
if (e.Handled)
|
||||
_notifications?.ShowError("Der Vorgang ist fehlgeschlagen. Details wurden protokolliert.");
|
||||
}
|
||||
|
||||
private static bool IsRecoverable(Exception exception) => exception is
|
||||
IOException or
|
||||
UnauthorizedAccessException or
|
||||
HttpRequestException or
|
||||
TimeoutException or
|
||||
OperationCanceledException;
|
||||
|
||||
private static void OnAppDomainUnhandledException(object sender, UnhandledExceptionEventArgs e)
|
||||
{
|
||||
_logger?.Error(
|
||||
|
||||
Reference in New Issue
Block a user