XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
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();
    }
}