Nabend,
ich wusste nicht, in welchen Unterbereich ich es posten sollte. Falls es hier falsch ist, gerne verschieben.
Ausgangssituation:
Ziel:
Versuchte Lösungen:
Console.SetCursorPosition(x, y);
Console.Write("\rText");
Hier einmal der Code dazu:
public static void LogDownload(ITransferProgress progress, DownloadItem downloadItem)
{
string filename = Path.GetFileName(downloadItem.OutputPath);
Console.SetCursorPosition(0, downloadItem.CursorTopPosition);
string outputString = $"{filename}\t\t\t\t{progress.PercentComplete:P}\t|\t" +
$"{progress.CurrentFileSize:0.##} {progress.CurrentFileSizeSuffix} / {progress.FileSize:0.##} {progress.FileSizeSuffix}";
//ClearText(outputString, 0, downloadItem.CursorTopPosition);
Console.Write($"\r{outputString}");
}
private static void ClearText(string text, int x, int y)
{
Console.SetCursorPosition(x, y);
for (int i = 0; i < text.Length; i++)
{
Console.Write(" ");
}
Console.SetCursorPosition(x, y);
}
Das ganze funktioniert auch halbwegs (flackert dann nur), wenn es nur eine Zeile ist. Nur wenn mehrere Zeilen geschrieben werden,
a) flackerts
b) der Text ist irgendwo, wo er nicht hin soll und doppelt
Hier auch einmal der Output mit mehreren Downloads. Output ist genau so, wie der oben genannte Code.
Wisst Ihr wie man das besser / performanter, ohne flackern und das alles richtig angezeigt wird umsetzen kann?
Ich gehe davon aus, dass ich zu viel neu schreibe, aber dann fällt mir auch keine andere Lösung ein.
Grüße
Hallo,
bzgl. dem doppelten Text: das liegt daran, du du einen längeren Text mit einem kürzeren überschrieben möchtest, jedoch der Rest des längeren Textes noch sichtbar bleibt.
Du sollest deine Methode so abändern, daß sie nach dem Schreiben des Textes noch (MaxLength - CurrentTextLength)
Leerzeichen dahinter schreibt (d.h. deine bisherige ClearText
-Methode macht bisher so keinen Sinn, da du nur die Länge des aktuellen Textes berücksichtigt hast - und dieser dann mit dem eigentlichen Text sowieso wieder überschrieben wird).
Das Flackern liegt m.E. daran, wie oft du (pro Sekunde) den Text anzeigst.
Neulich beim Hanselman diesen Blog gesehen, wäre das nicht was?
Spectre.Console lets you make beautiful console apps with .NET Core
@Th69 habe ich nach deiner Antwort auch versucht. Ändert nichts daran.
Hab aber herausgefunden das er "\t" nicht mag. Habe jetzt manuell mit Whitespaces gefüllt und es geht halbwegs.
Neulich beim Hanselman diesen Blog gesehen, wäre das nicht was?
>
Sieht auf dem 1. Blick sehr gut aus. Gucke ich mir an. Danke!