Прогрессные полосы в приложении консоли C# перекрываютсяC#

Место общения программистов C#
Anonymous
Прогрессные полосы в приложении консоли C# перекрываются

Сообщение Anonymous »

Я пытаюсь создать индикатор прогресса в моем приложении консоли C#, который обновляется на той же строке, но есть ошибка, которую я не смог исправить. Когда представление достигает дна и начинает прокручивать, если я пишу несколько индикаторов прогресса, то они перекрываются, и каждый элемент обновляется в последней строке. Однако это происходит во всех других терминалах, которые я протестировал (новый терминал Windows, Git Bash, Alacritty). < /P>
Я выполняю 5 задач выполнения, как SO: < /p>

Код: Выделить всё

internal class Program
{
static void Main(string[] args)
{
Log($"New Start at line {Console.CursorTop}");

var tasks = new List();

for (int i = 0; i < 5; i++)
{
tasks.Add(DownloadFiles(i, 20));
}

Task.WaitAll(tasks.ToArray());
}

static async Task DownloadFiles(int itemNumber, int max)
{
var spinner = new ProgressSpinner();

for (int j = 1; j 
, глядя на журналы, я смог выяснить причину проблемы: в Cmd Console.cursortop представляет фактический индекс линии с самого начала, в то время как в других терминалах это индекс линии, если 0 является первой видимой строкой. Я получаю такой вывод в журнале: < /p>
New Start at line 54
54
54
54
54
54
< /code>
Тогда неудивительно, что я получаю поведение, которое я описываю. Тем не менее, я действительно не уверен, как это исправить. Я мог бы просто сохранить свой собственный номер статического индекса для элементов прогресса, но это не будет работать не очень хорошо, если я также использую консоль.writeline 
в других местах моего приложения и чередую их с выводом элемента прогресса. Есть общее решение?


Подробнее здесь: https://stackoverflow.com/questions/795 ... verlapping

Вернуться в «C#»