AvaloniaUI: Setup was already called on one of AppBuilder instances

Viewed 419

Whenever I try to restart Avalonia application form base application, I get an exception: "Setup was already called on one of AppBuilder instances." on SetupWithLifetime() call.

Application Startup code is:

       public static void Start()
        {
            lifeTime = new ClassicDesktopStyleApplicationLifetime()
            {
                ShutdownMode = ShutdownMode.OnLastWindowClose
            };

            BuildAvaloniaApp().SetupWithLifetime(lifeTime);

            lifeTime.Start(new[] { "" });
        }

        public static AppBuilder BuildAvaloniaApp()
            => AppBuilder.Configure<App>()
                .UsePlatformDetect()
                .LogToTrace()
                .UseReactiveUI();

Application shutdown code is:

        lifeTime.Shutdown();
        lifeTime.Dispose();

Here's a link to functional example code, which produces this error: https://pastebin.com/J1jqppPv Has anyone encountered such problem? Thank you

1 Answers

SetupWithLifetime calls Setup which can only be called once. A possible solution is to call SetupWithoutStarting on BuildAvaloniaApp, which can only be called once as well, for example:

private static AppBuilder s_builder;

static void Main(string[] args)
{
    s_builder = BuildAvaloniaApp();
}

public static void Start()
{
    lifeTime = new ClassicDesktopStyleApplicationLifetime()
    {
        ShutdownMode = ShutdownMode.OnLastWindowClose
    };

    s_builder.Instance.Lifetime = lifeTime;
    s_builder.Instance.OnFrameworkInitializationCompleted();

    lifeTime.Start(new[] { "" });
}

private static AppBuilder BuildAvaloniaApp()
    => AppBuilder.Configure<App>()
        .UsePlatformDetect()
        .LogToTrace()
        .UseReactiveUI();

Additional note: Restarting the app probably won't work on macOS.

Related