-
Автор темы
- #1
Сегодня я хочу поделиться с вами достаточно неплохой библиотекой для визуализации длительных задач командной строки или Powershell. Она также поддерживает создание дочерних индикаторов выполнения, что позволяет довольно хорошо визуализировать зависимости и параллелизм. Разработчики добавили поддержку .NET Core, поэтому проблем с кроссплатформенностью можно не ожидать :).
Официальный пакет на NuGet:
GitHub репозиторий:
Как это выглядит?
Package Manager
.NET CLI
Использование
Пример реализации прогрессбара
События прогрессбара
Существует 2 способа "подписаться на событие" изменения прогресса. Можно использовать функцию
Для простых случаев, когда тип прогресса представляет собой плавающее значение между 0.0 и 1.0, представляющее процент завершения, используйте
Больше примеров можно посмотреть
Изменение стиля
Многие свойства пргрессбара могут быть стилизованы, включая цвет переднего плана, фон (неактивная часть) и изменение цвета по завершении.
Наследование прогрессбаров
Прогрессбар может создавать дочерние элементы, каждый дочерний прогрессбар может порождать свои собственные. У каждого из них могут быть свои варианты стилизации.
Это отлично подходит для визуализации параллельных запущенных задач.
По умолчанию дочерние элементы будут сворачиваться, освобождая место для новых/параллельных прогрессбаров. Вы можете сохранить их, установив
Библиотека обладает гораздо большим функционалом, чем я указал в теме. Более подробно с ним можно ознакомится в официальном репозитории, однако, к сожалению, документация от разработчиков, вопреки обещаниям, так еще и не вышла :(
Официальный пакет на NuGet:
Пожалуйста, авторизуйтесь для просмотра ссылки.
GitHub репозиторий:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Как это выглядит?
Package Manager
PM> Install-Package NotificationManager
.NET CLI
dotnet add package NotificationManager
Использование
Пример реализации прогрессбара
C#:
const int totalTicks = 10;
var options = new ProgressBarOptions
{
ProgressCharacter = '─',
ProgressBarOnBottom = true
};
using (var pbar = new ProgressBar(totalTicks, "Initial message", options))
{
pbar.Tick(); //will advance pbar to 1 out of 10.
//we can also advance and update the progressbar text
pbar.Tick("Step 2 of 10");
}
События прогрессбара
Существует 2 способа "подписаться на событие" изменения прогресса. Можно использовать функцию
Tick()
, как описанно выше. Альтернативным способом является использование экземпляра IProgress<T>
, который вы можете получить вызовом AsProgress<T>()
в объекте ранее созданного прогрессбара.Для простых случаев, когда тип прогресса представляет собой плавающее значение между 0.0 и 1.0, представляющее процент завершения, используйте
ProgressBar.AsProgress<float>()
:
C#:
using ProgressBar progressBar = new ProgressBar(10000, "My Progress Message");
IProgress progress = progressBar.AsProgress<float>();
progress.Report(0.25); // Advances the progress bar to 25%
Пожалуйста, авторизуйтесь для просмотра ссылки.
или
Пожалуйста, авторизуйтесь для просмотра ссылки.
.Изменение стиля
Многие свойства пргрессбара могут быть стилизованы, включая цвет переднего плана, фон (неактивная часть) и изменение цвета по завершении.
C#:
const int totalTicks = 10;
var options = new ProgressBarOptions
{
ForegroundColor = ConsoleColor.Yellow,
ForegroundColorDone = ConsoleColor.DarkGreen,
BackgroundColor = ConsoleColor.DarkGray,
BackgroundCharacter = '\u2593'
};
using (var pbar = new ProgressBar(totalTicks, "showing off styling", options))
{
TickToCompletion(pbar, totalTicks, sleep: 500);
}
Наследование прогрессбаров
Прогрессбар может создавать дочерние элементы, каждый дочерний прогрессбар может порождать свои собственные. У каждого из них могут быть свои варианты стилизации.
Это отлично подходит для визуализации параллельных запущенных задач.
C#:
const int totalTicks = 10;
var options = new ProgressBarOptions
{
ForegroundColor = ConsoleColor.Yellow,
BackgroundColor = ConsoleColor.DarkYellow,
ProgressCharacter = '─'
};
var childOptions = new ProgressBarOptions
{
ForegroundColor = ConsoleColor.Green,
BackgroundColor = ConsoleColor.DarkGreen,
ProgressCharacter = '─'
};
using (var pbar = new ProgressBar(totalTicks, "main progressbar", options))
{
TickToCompletion(pbar, totalTicks, sleep: 10, childAction: () =>
{
using (var child = pbar.Spawn(totalTicks, "child actions", childOptions))
{
TickToCompletion(child, totalTicks, sleep: 100);
}
});
}
CollapseWhenFinished = false
Библиотека обладает гораздо большим функционалом, чем я указал в теме. Более подробно с ним можно ознакомится в официальном репозитории, однако, к сожалению, документация от разработчиков, вопреки обещаниям, так еще и не вышла :(