using System.Diagnostics; using System.Text.Json; namespace XFEEDToolBox; public partial class App { private static async Task RunBackgroundDataProbeAsync(string path) { var gaps = new List(); var watch = Stopwatch.StartNew(); var previous = 0d; var timer = MainWindow.DispatcherQueue.CreateTimer(); timer.Interval = TimeSpan.FromMilliseconds(10); timer.Tick += (_, _) => { var now = watch.Elapsed.TotalMilliseconds; gaps.Add(now - previous); previous = now; }; object? result = null; string? error = null; try { await ViewModel.InitializeAsync(); watch.Restart(); previous = 0; timer.Start(); await ViewModel.ReadPluginStatusCommand.ExecuteAsync(null); timer.Stop(); result = new { uiThread = Environment.CurrentManagedThreadId, diagnostics = ViewModel.PluginQueryDiagnostics, elapsedMilliseconds = watch.Elapsed.TotalMilliseconds, dispatcherTicks = gaps.Count, maximumDispatchGapMilliseconds = gaps.Count == 0 ? 0 : gaps.Max(), ViewModel.PluginInstalled, ViewModel.PluginNavigationReady, ViewModel.PluginRelogReady, ViewModel.RelogAvailabilityText, ViewModel.PluginStatusText, passed = gaps.Count >= 10 && gaps.Max() < 150 }; } catch (Exception failure) { error = failure.ToString(); } finally { timer.Stop(); } Directory.CreateDirectory(Path.GetDirectoryName(Path.GetFullPath(path))!); await File.WriteAllTextAsync(path, JsonSerializer.Serialize(new { result, error, gameFlightCommandsInvoked = false, gameRestartInvoked = false, artificialWorkerDelayMilliseconds = 500 }, new JsonSerializerOptions { WriteIndented = true })); MainWindow.Close(); } }