I was also looking for a console progress bar. I didn’t find one that did what I needed, so I decided to roll my own. Click here for the source code (MIT License).
Features:
-
Works with redirected output
If you redirect the output of a console application (e.g.,
Program.exe > myfile.txt
), most implementations will crash with an exception. That’s becauseConsole.CursorLeft
andConsole.SetCursorPosition()
don’t support redirected output. -
Implements
IProgress<double>
This allows you to use the progress bar with async operations that report a progress in the range of [0..1].
-
Thread-safe
-
Fast
The
Console
class is notorious for its abysmal performance. Too many calls to it, and your application slows down. This class performs only 8 calls per second, no matter how often you report a progress update.
Use it like this:
Console.Write("Performing some task... ");
using (var progress = new ProgressBar()) {
for (int i = 0; i <= 100; i++) {
progress.Report((double) i / 100);
Thread.Sleep(20);
}
}
Console.WriteLine("Done.");