using System.Diagnostics;
using System.Text.Json;
namespace XFEEDToolBox;
public partial class App
{
private static async Task RunBackgroundDataProbeAsync(string path)
{
var gaps = new List<double>(); 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();
}
}
using System.Diagnostics;
using System.Text.Json;
namespace XFEEDToolBox;
public partial class App
{
private static async Task RunBackgroundDataProbeAsync(string path)
{
var gaps = new List<double>(); 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();
}
}