• Я зарабатываю 100 000 RUB / месяц на этом сайте!

    А знаешь как? Я всего-лишь публикую (создаю темы), а админ мне платит. Трачу деньги на мороженое, робуксы и сервера в Minecraft. А ещё на паль из Китая. 

    Хочешь так же? Пиши и узнавай условия: https://t.me/alex_redact
    Реклама: https://t.me/yougame_official

Исходник Красивый консольный ProgressBar

  • Автор темы Автор темы Irval
  • Дата начала Дата начала
Олдфаг
Олдфаг
Статус
Оффлайн
Регистрация
18 Фев 2019
Сообщения
2,842
Реакции
1,853
Сегодня я хочу поделиться с вами достаточно неплохой библиотекой для визуализации длительных задач командной строки или Powershell. Она также поддерживает создание дочерних индикаторов выполнения, что позволяет довольно хорошо визуализировать зависимости и параллелизм. Разработчики добавили поддержку .NET Core, поэтому проблем с кроссплатформенностью можно не ожидать :).

Официальный пакет на NuGet:
Пожалуйста, авторизуйтесь для просмотра ссылки.

GitHub репозиторий:
Пожалуйста, авторизуйтесь для просмотра ссылки.


Как это выглядит?
pbar-windows.gif
pbar-osx.gif

Package Manager
PM> Install-Package NotificationManager

.NET CLI
dotnet add package NotificationManager

Использование
Пример реализации прогрессбара
C#:
Expand Collapse Copy
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#:
Expand Collapse Copy
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#:
Expand Collapse Copy
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);
}
styling-windows.gif

Наследование прогрессбаров
Прогрессбар может создавать дочерние элементы, каждый дочерний прогрессбар может порождать свои собственные. У каждого из них могут быть свои варианты стилизации.

Это отлично подходит для визуализации параллельных запущенных задач.
C#:
Expand Collapse Copy
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

Библиотека обладает гораздо большим функционалом, чем я указал в теме. Более подробно с ним можно ознакомится в официальном репозитории, однако, к сожалению, документация от разработчиков, вопреки обещаниям, так еще и не вышла :(
 
//1000 симпатию влепил я)
Красава, получилось отлично. Респект за проделанную работу)
 
ля какая сосочка, девочка прям вах
 
Круто смотрится.
 
Вау, спасибо! Давно подобную штукенцию искал
 
Назад
Сверху Снизу