diff --git a/Il2CppInspector.Redux.CLI/Program.cs b/Il2CppInspector.Redux.CLI/Program.cs index f8d8f7a..a9d88ed 100644 --- a/Il2CppInspector.Redux.CLI/Program.cs +++ b/Il2CppInspector.Redux.CLI/Program.cs @@ -19,7 +19,7 @@ builder.Services.Configure(options => builder.Services.AddFrontendCore(); builder.Logging.ClearProviders(); -var app = builder.Build(); +await using var app = builder.Build(); app.UseCors(); diff --git a/Il2CppInspector.Redux.GUI/Program.cs b/Il2CppInspector.Redux.GUI/Program.cs index 289d2aa..d4298c2 100644 --- a/Il2CppInspector.Redux.GUI/Program.cs +++ b/Il2CppInspector.Redux.GUI/Program.cs @@ -18,7 +18,7 @@ builder.Services.AddFrontendCore(); builder.Services.AddSingleton(); builder.Services.AddHostedService(p => p.GetRequiredService()); -var app = builder.Build(); +await using var app = builder.Build(); app.UseCors(); diff --git a/Il2CppInspector.Redux.GUI/UiProcessService.cs b/Il2CppInspector.Redux.GUI/UiProcessService.cs index f9e9e12..f76e40a 100644 --- a/Il2CppInspector.Redux.GUI/UiProcessService.cs +++ b/Il2CppInspector.Redux.GUI/UiProcessService.cs @@ -1,4 +1,5 @@ using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; namespace Il2CppInspector.Redux.GUI; @@ -9,11 +10,13 @@ public class UiProcessService(IHostApplicationLifetime lifetime) : BackgroundSer private Process? _uiProcess; private string? _uiExectuablePath; + private readonly TaskCompletionSource _uiProcessCreatedTask = new(); public void LaunchUiProcess(int port) { _uiExectuablePath ??= ExtractUiExecutable(); _uiProcess = Process.Start(new ProcessStartInfo(_uiExectuablePath, [port.ToString()])); + _uiProcessCreatedTask.SetResult(); } private static string ExtractUiExecutable() @@ -40,11 +43,17 @@ public class UiProcessService(IHostApplicationLifetime lifetime) : BackgroundSer } } + [MemberNotNull(nameof(_uiProcess))] + private async Task WaitForUiLaunchAsync(CancellationToken cancellationToken) + { + await _uiProcessCreatedTask.Task.WaitAsync(cancellationToken); + cancellationToken.ThrowIfCancellationRequested(); + Debug.Assert(_uiProcess != null); + } + protected override async Task ExecuteAsync(CancellationToken stoppingToken) { - while (_uiProcess == null) - await Task.Delay(TimeSpan.FromMilliseconds(10), stoppingToken); - + await WaitForUiLaunchAsync(stoppingToken); await _uiProcess.WaitForExitAsync(stoppingToken); lifetime.StopApplication(); }