Документация по Avalonia UI
< Все темы
Печать

Необработанные исключения

Avalonia не предлагает никакого механизма для глобальной обработки исключений и пометки их как обработанных. Причина в том, что нельзя знать, правильно ли было обработано исключение, и поэтому приложение может находиться в недопустимом состоянии. Вместо этого настоятельно рекомендуется обрабатывать исключения локально, если они могут быть обработаны вашим приложением. Тем не менее, по-прежнему рекомендуется регистрировать любое необработанное исключение для дальнейшей поддержки и отладки.

Логгирование

Мы рекомендуем регистрировать исключения в консоли, файле или где-либо еще. Доступно несколько библиотек ведения журналов, например Serilog и NLog.

Глобальные try-catch

Вы можете поймать любое исключение из основного потока, который также является потоком пользовательского интерфейса в Avalonia, в вашем файле Program.cs. Для этого мы просто обернем весь void Main в блок try и catch. В блоке catch вы можете зарегистрировать ошибку, сообщить пользователю, отправить файл журнала или перезапустить приложение.

// File: Program.cs

public static void Main(string[] args)
{
    try
    {
        // prepare and run your App here
        BuildAvaloniaApp()
            .StartWithClassicDesktopLifetime(args);
    }
    catch (Exception e)
    {
        // here we can work with the exception, for example add it to our log file
        Log.Fatal(e, "Something very bad happened");
    }
    finally
    {
        // This block is optional. 
        // Use the finally-block if you need to clean things up or similar
        Log.CloseAndFlush();
    }
}

 Исключения из другого потока

Если вы используете Task для асинхронного выполнения какой-либо работы, вы можете настроить TaskScheduler.UnobservedTaskException. Для получения дополнительной информации прочитайте документацию Microsoft .NET.

Исключения из реактивного пользовательского интерфейса

Если вы используете Avalonia вместе с ReactiveUI, вы можете подписаться на их RxApp.DefaultExceptionHandler. Для получения дополнительной информации см. Обработчик исключений ReactiveUI по умолчанию.

Обратите внимание, что RxApp.DefaultExceptionHandler должен быть установлен до создания какой-либо ReactiveCommand. В противном случае пользовательский обработчик не будет использоваться. Вы можете установить его в точке входа вашего приложения или перед созданием любого представления или окна Avalonia.

Оглавление