Phil Scott 43e9669395 Update documentation packages to latest versions
* HighlightService was modified to support GetClassifiedSpansAsync method
* Updated Program.cs to pull in the proper location of the Json and ImageSharp extension projects
* Statiq must have changed how they are doing xrefs, so I adjusted those to be more specific with a few links
2024-11-23 14:48:46 +01:00

2.7 KiB

Title: Progress Order: 5 RedirectFrom: progress Description: "Spectre.Console can display information about long running tasks in the console using progress bars." Highlights: - Custom styling of progress bars. - Multiple predefined columns such as Throughput, Estimated Time Remaining, and more. - Fallback for non-interactive consoles such as CI runners. Reference: - T:Spectre.Console.Progress - M:Spectre.Console.AnsiConsole.Progress Xref: live-progress

Spectre.Console can display information about long running tasks in the console.

The progress display is not thread safe, and using it together with other interactive components such as prompts, status displays or other progress displays are not supported.

If the current terminal isn't considered "interactive", such as when running in a continuous integration system, or the terminal can't display ANSI control sequence, any progress will be displayed in a simpler way.

Usage

// Synchronous
AnsiConsole.Progress()
    .Start(ctx => 
    {
        // Define tasks
        var task1 = ctx.AddTask("[green]Reticulating splines[/]");
        var task2 = ctx.AddTask("[green]Folding space[/]");

        while(!ctx.IsFinished) 
        {
            task1.Increment(1.5);
            task2.Increment(0.5);
        }
    });

Asynchronous progress

If you prefer to use async/await, you can use StartAsync instead of Start.

// Asynchronous
await AnsiConsole.Progress()
    .StartAsync(async ctx =>
    {
        // Define tasks
        var task1 = ctx.AddTask("[green]Reticulating splines[/]");
        var task2 = ctx.AddTask("[green]Folding space[/]");

        while (!ctx.IsFinished)
        {
            // Simulate some work
            await Task.Delay(250);

            // Increment
            task1.Increment(1.5);
            task2.Increment(0.5);
        }
    });

Configure

AnsiConsole.Progress()
    .AutoRefresh(false) // Turn off auto refresh
    .AutoClear(false)   // Do not remove the task list when done
    .HideCompleted(false)   // Hide tasks as they are completed
    .Columns(new ProgressColumn[] 
    {
        new TaskDescriptionColumn(),    // Task description
        new ProgressBarColumn(),        // Progress bar
        new PercentageColumn(),         // Percentage
        new RemainingTimeColumn(),      // Remaining time
        new SpinnerColumn(),            // Spinner
        new DownloadedColumn(),         // Downloaded
        new TransferSpeedColumn(),      // Transfer speed
    })
    .Start(ctx =>
    {
        // Omitted
    });