Przejdź do treści stopki
Iron Academy Logo
Aplikacja C#
Aplikacja C#

Inne Kategorie

Wiadomości statusu na żywo i spinnery - seria Spectre Console

Tim Corey
9m 31s

Spectre Console to potężna biblioteka .NET, która pozwala tworzyć piękne aplikacje konsolowe bez opuszczania środowiska C#. W swoim cyklu wideo Tim Corey przechodzi przez jego funkcje krok po kroku. W tym wideo "Live Status Messages and Spinners - Spectre Console Series", Tim skupia się na Spectre Console Status, narzędziu do pokazywania wiadomości o stanie na żywo i animowanych spinnerów podczas gdy aplikacja konsolowa wykonuje zadanie długoterminowe.

W tym artykułe przyjrzymy się bliżej funkcji statusu Spectre Console, śledząc wyjaśnienia Tima. Zobaczysz, jak Tim najpierw ustawia prosty spinner ładowania, następnie dostosowuje go, a na końcu używa go w bardziej realistycznym, asynchronicznym przykładzie do pobierania danych. Pod koniec pokazu zobaczysz, jak Spectre Console ułatwia przekazywanie użytkownikowi jasnych informacji o tym, co dzieje się w tle.

Zaczynamy od prostszego przykładu statusu (0:31)

Tim zaczyna od pokazania najprostszych przykładów wiadomości o statusie. Wywołuje:

AnsiConsole.Status()
    .Start("Ładowanie...", ctx =>
    {
        Thread.Sleep(3000);
    });

To najprostszy sposób, aby dodać wskaźnik statusu do projektu konsolowego. Wyjaśnia, że wewnątrz klamr można wykonać dowolne polecenia lub uruchomić dowolny kod, który zajmuje czas. W pokazie Tim używa tylko trzysekundowego sleep, aby zasymulować powolną operację.

Podczas uruchamiania tej aplikacji konsolowej natychmiast widać napis "Ładowanie…" na linii wraz z domyślnym spinnerem. Ten szybki pokaz demonstruje, jak Spectre Console może przekształcić nawet zwykły prompt w coś bardziej dynamicznego.

Spectre Console Live Status Spinners 1 related to Zaczynamy od prostszego przykładu statusu (0:31)

Dostosowywanie spinnera – Obsługiwane typy (1:54)

O 1:54 Tim przechodzi do dostosowywania. Spectre Console ma długą listę wbudowanych typów spinnerów, które można zmienić za pomocą:

ctx.Spinner = Spinner.Known.Aesthetic;

Przewija dostępne typy i wybiera "Aesthetic", aby pokazać, że format spinnera można łatwo zmienić. Tego typu mała zmiana już sprawia, że aplikacja konsolowa wygląda bardziej dopracowana.

Spectre Console Live Status Spinners 2 related to Dostosowywanie spinnera – Obsługiwane typy (1:54)

Tim zauważa również o 2:39, że nie każdy terminal w pełni wspiera każdy spinner. Jeżeli pracujesz w Visual Studio, możesz zobaczyć zapasową animację. To sposób Spectre Console na eleganckie obsługiwanie błędów — automatycznie wybiera prostszy spinner, który działa w Twoim środowisku, dzięki czemu użytkownik nadal otrzymuje feedback.

Dłączego to ułatwia użytkowanie aplikacji konsolowych (3:07)

O 3:07 Tim przerywa, aby wyjaśnić, dłączego ta funkcja ma znaczenie. Jeśli Twoja aplikacja tworzy lub pobiera pliki, przetwarza dane lub robi cokolwiek czasochłonnego, wiadomość o statusie ze spinnerem "informuje użytkownika, że coś się dzieje." Bez niej, pusta konsola mogłaby wyglądać na zamrożoną.

Tim podkreśla, że gdy zadanie się zakończy, status znika, pozostawiając jedynie informacje o wynikach. To pomaga utrzymać aplikację konsolową zarówno czystą, jak i informacyjną.

Przechodzenie do Await AnsiConsole do pracy asynchronicznej (3:24)

Do tego momentu Tim używał Start(). Jednak w rzeczywistych aplikacjach prawdopodobnie czekasz na operacje. O 3:34 przechodzi do:

await AnsiConsole.Status()
    .StartAsync("Ładowanie...", async ctx =>
    {
        // praca asynchroniczna
    });

Ta mała zmiana — użycie await AnsiConsole i .StartAsync() — pozwala uruchomić kod asynchroniczny wewnątrz bloku statusu. Tim ostrzega o 4:02, że kontekst wewnątrz nie jest bezpieczny wątkowo dla aktualizacji UI. Zawsze "wracaj do wątku UI", aby zmienić spinner lub tekst statusu. Ta kontrola unika dziwnych błędów, gdy próbujesz aktualizować z innego wątku.

Pobieranie danych w pętli – Bardziej realistyczna demonstracja (4:26)

Następnie Tim tworzy pętlę, aby zasymulować zadanie z rzeczywistego świata: pobieranie 20 kursów z API. Przepisuje kod, aby wyglądał tak:

for (int i = 1; i < 21; i++)
{
    ctx.Status($"Pobieranie kursu {i}...");
    var jsonResponse = await Helpers.Fetch("https://sample.com/courses/{i}");
    AnsiConsole.MarkupLine("[red]Kurs {i} pobrany[/]");
}

Tutaj pokazuje trzy ważne funkcje Spectre Console działające razem:

  • Context.Status() dynamicznie zmienia tekst statusu pokazywany obok spinnera.

  • await Helpers.Fetch(...) reprezentuje prawdziwe zadanie asynchroniczne wewnątrz Twojej aplikacji konsolowej.

  • AnsiConsole.MarkupLine() używa znaczników Spectre do dodawania kolorów. Tim wybiera [red] tylko "żeby robić coś zabawnego."

Ten przykład pokazuje, jak łatwo można dodać feedback o postępie do projektu bez skomplikówanego kodu.

Obejrzenie działającej aplikacji (7:21)

Gdy Tim uruchamia nowy kod, widzisz zielony spinner (typ Aesthetic w jego motywie) i tekst statusu zmieniający się na "Pobieranie kursu 1…," "Pobieranie kursu 2…," itd. Gdy każde pobieranie się kończy, pojawia się czerwona linia: "Kurs 1 pobrany," "Kurs 2 pobrany."

Spectre Console Live Status Spinners 3 related to Obejrzenie działającej aplikacji (7:21)

Tim zauważa, że to świetny sposób na śledzenie zadań, takich jak przesyłanie danych czy przetwarzanie plików. "Pozostawiasz za sobą wiadomości o wynikach, ale nie ma już tej wiadomości o czekaniu na pobieranie," wyjaśnia o 7:27.

Spectre Console Live Status Spinners 4 related to Obejrzenie działającej aplikacji (7:21)

Synchronizacyjne vs. Asynchronizacyjne – Brak różnicy w wydajności (8:00)

O 8:00 Tim porusza kwestię wydajności. Użycie Start() w porównaniu do StartAsync() nie wpływa na to, jak szybko animuje się spinner. To ma znaczenie tylko wtedy, gdy kod wewnętrzny jest asynchroniczny. Jeśli używasz await, potrzebujesz .StartAsync(); w przeciwnym razie, .Start() wystarczy.

Oznacza to, że możesz dodać feedback o statusie do swojej aplikacji konsolowej bez obaw o spowolnienie jej działania. Po prostu otacza to, co już robisz.

Wbudowane i niestandardowe spinnery – Długa lista do sprawdzenia (8:45)

Kończąc, Tim podkreśla, że Spectre Console oferuje "mnóstwo" wbudowanych spinnerów. Możesz przeglądać listę i wybrać ten, który Ci się podoba — wszystko od kropek do strzałek do "estetycznych." Później w serii Tim pokaże, jak stworzyć własny spinner, aby móc w pełni dopasować branding lub kolory Twojej aplikacji.

Ta elastyczność jest częścią tego, co sprawia, że Spectre Console to świetne narzędzie do budowania pięknych aplikacji konsolowych. Daje Ci feedback o postępie, wyjście promp, i dynamiczne wizualizacje bez ponownego wymyślania koła.

Podsumowanie – Spectre Console Status w akcji (9:07)

Podążając za wideo Tima Coreya, zobaczyliśmy, jak używać Spectre Console Status, aby poprawić aplikację konsolową .NET:

  • Użyj AnsiConsole.Status().Start() lub await AnsiConsole.Status().StartAsync(), aby pokazać spinner i tekst statusu podczas gdy zadanie jest wykonywane.

  • Dynamicznie aktualizuj context.Status() wewnątrz swojej pętli.

  • Wyjście wyników za pomocą AnsiConsole.MarkupLine() i znaczników Spectre dla czerwonego, zielonego lub innych kolorów.

  • Wybierz z wbudowanej listy spinnerów lub stwórz własny później.

  • Dostarcz jasnych informacji użytkownikowi, jednocześnie utrzymując czystość wyjścia konsoli.

Te małe akcenty mogą zamienić zwykły projekt konsolowy w piękną aplikację konsolową. Funkcja statusu Spectre Console ułatwia dzielenie się postępem, sprawdzanie wyników i sprawianie, by prompt Twojej aplikacji był bardziej przyjazny i interaktywny.

Hero Worlddot related to Wiadomości statusu na żywo i spinnery - seria Spectre Console
Hero Affiliate related to Wiadomości statusu na żywo i spinnery - seria Spectre Console

Zarabiaj więcej, dzieląc się tym, co kochasz

Tworzysz treści dla deweloperów pracujących z .NET, C#, Java, Python, czy Node.js? Zamień swoją wiedzę specjalistyczną na dodatkowy dochód!

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie