1

每当我尝试重新启动 Avalonia 应用程序表单基本应用程序时,都会出现异常:“已在其中一个 AppBuilder 实例上调用了安装程序。” 在 SetupWithLifetime() 调用上。

应用程序启动代码为:

       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();

应用程序关闭代码是:

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

这是产生此错误的功能示例代码的链接:https://pastebin.com/J1jqppPv 有人遇到过这样的问题吗?谢谢

4

1 回答 1

2

SetupWithLifetimeSetup只能调用一次的调用。一个可能的解决方案是调用SetupWithoutStartingon BuildAvaloniaApp,它也只能调用一次,例如:

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();

附加说明:重新启动应用程序可能无法在 macOS 上运行。

于 2021-02-02T16:34:50.590 回答