Für ein kleines Projekt brauchte ich einen Fortschrittsbalken für eine Kommandozeilen-Applikation. Ich war erstaunt, wie einfach das funktionierte und möchte meine Erfahrungen hier teilen.
Hier schon mal ein Blick auf das Endergebnis:
Zuerst einmal müssen die Begrenzungen des Fortschrittsbalken gezeichnet werden.
Um den Cursor zu positionieren, kann auf die statischen Eigenschaften CursorTop und CursorLeft der Console zurückgegriffen werden:
Hier der Code zum Erstellen der Begrenzungen des Fortschrittsbalkens:
// Create boundaries for progress bar
Console.CursorTop = topOffset;
Console.CursorLeft = leftOffset;
Console.Write("[");
Console.CursorLeft = length;
Console.Write("]");
Das sieht dann erstmal so aus:
Dann füllen wir die Begrenzungen mit dem aktuellen Fortschritt:
// Calculate size of one percent element
float progressElementSize = ((float)length – leftOffset – 2) / total;
// Create progress content
int position = 1;
Console.CursorLeft = position;
for (int i = leftOffset; i < progressElementSize * progress; i++)
{
Console.BackgroundColor = progressColor;
Console.CursorLeft = position++;
Console.Write(" ");
}
Console.BackgroundColor = ConsoleColor.Black;
Und das sieht dann so aus:
Ganz wichtig: In der letzten Zeile wird die Farbe wieder auf schwarz gesetzt, da sonst die aktuelle Schriftfarbe auf die des Fortschritts gesetzt wird.
Abschließend will ich noch den aktuellen Fortschritt prozentual anzeigen:
// Write progress message
Console.CursorLeft = length + 2;
int result = progress * 100 / total;
Console.Write(customProgressMessage ?? (result + "%").PadLeft(4));
Das .PadLeft(4) habe ich angehängt, damit der String nicht springt, wenn von 9% auf 10% und von 99% auf 100% gesprungen wird.
Viel Spaß damit
Download: http://sdrv.ms/10HH7Pk