Mpdreamz / shellprogressbar

ShellProgressBar - display progress in your console application
MIT License
1.43k stars 134 forks source link

Progress not staying on one line #91

Open joshcomley opened 2 years ago

joshcomley commented 2 years ago

Edit: I'm using .NET 5.

If I have this code (from examples just with an async delay):

public class Program
{
    public static async Task Main(string[] args)
    {
        const int totalTicks = 10;
        var options = new ProgressBarOptions
        {
            ProgressCharacter = '─',
            ProgressBarOnBottom = true
        };
        using (var pbar = new ProgressBar(totalTicks, "Initial message", options))
        {
            for (var i = 0; i < totalTicks; i++)
            {
                pbar.Tick(); //will advance pbar to 1 out of 10.
                await Task.Delay(1000);
            }
        }
    }
}

Then my output looks like this:

image

If I run it non-async with Thread.Sleep(x) as follows:

public class Program
{
    public static void Main(string[] args)
    {
        const int totalTicks = 10;
        var options = new ProgressBarOptions
        {
            ProgressCharacter = '─',
            ProgressBarOnBottom = true
        };
        var pbar = new ProgressBar(totalTicks, "Initial message", options);
        for (var i = 0; i < totalTicks; i++)
        {
            pbar.Tick(); //will advance pbar to 1 out of 10.
            Thread.Sleep(1000);
        }
    }
}

My output looks like this:

image

What am I doing wrong? My understanding is it should appear on one line and continuously update that line.

Many thanks!

TweakBox commented 2 years ago

I also noticed that the ProgressBar would slowly clear the lines above it and replace the line as well