From 26508e6a8a4a9a27ba0c550a30b987c8cb460c67 Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Thu, 14 Jul 2022 02:18:26 -0600 Subject: [PATCH] Speed up start time --- Source/AppScaffolding/LibationScaffolding.cs | 4 +- Source/LibationWinForms/Program.cs | 52 ++++++++++++++------ 2 files changed, 40 insertions(+), 16 deletions(-) diff --git a/Source/AppScaffolding/LibationScaffolding.cs b/Source/AppScaffolding/LibationScaffolding.cs index 9af8b75f..a2fb3c80 100644 --- a/Source/AppScaffolding/LibationScaffolding.cs +++ b/Source/AppScaffolding/LibationScaffolding.cs @@ -411,9 +411,9 @@ namespace AppScaffolding public static void migrate_from_7_10_1(Configuration config) { - var lastNigrationThres = config.GetNonString($"{nameof(migrate_from_7_10_1)}_ThrewError"); + var lastMigrationThrew = config.GetNonString($"{nameof(migrate_from_7_10_1)}_ThrewError"); - if (lastNigrationThres) return; + if (lastMigrationThrew) return; try { diff --git a/Source/LibationWinForms/Program.cs b/Source/LibationWinForms/Program.cs index e82dea47..46373dbe 100644 --- a/Source/LibationWinForms/Program.cs +++ b/Source/LibationWinForms/Program.cs @@ -2,8 +2,10 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using System.Threading.Tasks; using System.Windows.Forms; using Avalonia; +using Avalonia.Controls.ApplicationLifetimes; using Avalonia.ReactiveUI; using Dinah.Core; using LibationFileManager; @@ -21,7 +23,39 @@ namespace LibationWinForms static bool UseAvaloniaUI = true; [STAThread] - static void Main() + static async Task Main() + { + var startupTask = Task.Run(RunStartupStuff); + + if (UseAvaloniaUI) + { + var appBuilderTask = Task.Run(BuildAvaloniaApp); + var classicLifetimeTask = Task.Run(() => new ClassicDesktopStyleApplicationLifetime()); + + await Task.WhenAll(appBuilderTask, classicLifetimeTask, startupTask); + + if (!startupTask.Result) + return; + + appBuilderTask.Result.SetupWithLifetime(classicLifetimeTask.Result); + classicLifetimeTask.Result.Start(null); + } + else + { + if (!await startupTask) + return; + + System.Windows.Forms.Application.Run(new Form1()); + } + } + + public static AppBuilder BuildAvaloniaApp() + => AppBuilder.Configure() + .UsePlatformDetect() + .LogToTrace() + .UseReactiveUI(); + + private static bool RunStartupStuff() { try { @@ -71,23 +105,13 @@ namespace LibationWinForms { MessageBox.Show($"{body}\r\n\r\n{ex.Message}\r\n\r\n{ex.StackTrace}", title, MessageBoxButtons.OK, MessageBoxIcon.Error); } - return; - } - + return false; + } // global exception handling (ShowAdminAlert) attempts to use logging. only call it after logging has been init'd postLoggingGlobalExceptionHandling(); - if (UseAvaloniaUI) - BuildAvaloniaApp().StartWithClassicDesktopLifetime(null); - else - System.Windows.Forms.Application.Run(new Form1()); + return true; } - public static AppBuilder BuildAvaloniaApp() -=> AppBuilder.Configure() -.UsePlatformDetect() -.LogToTrace() -.UseReactiveUI(); - private static void RunInstaller(Configuration config) {