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

Inne Kategorie

Niestandardowy spinner oczekiwania - seria Spectre Console

Tim Corey
6m 12s

Spectre Console to biblioteka .NET, która pozwala tworzyć piękne aplikacje konsolowe z bogatym wyjściem, kolorami i formatowaniem. Tim Corey rozpoczyna swój film "Build a Custom Waiting Spinner — Spectre Console Series" od przypomnienia, że Spectre Console przekształca zwykłe aplikacje konsolowe w języku C# w narzędzia bardziej atrakcyjne wizualnie i zawierające więcej informacji. W tej lekcji Tim pokazuje, jak zaimplementować niestandardowy wskaźnik ładowania — niewielką, ale potężną funkcję, która może ułatwić śledzenie wskaźników stanu i postępu programu konsolowego.

W 0:16 Tim wyjaśnia, że kod źródłowy projektu znajduje się w linku pod filmem. Zachęca odbiorców do samodzielnego testowania i eksperymentowania z nim, zmieniając ustawienia lub dodając funkcje, aby zrozumieć, jak działa w ich własnym środowisku. Jest to szczególnie pomocne, jeśli chcesz obsługiwać różne terminale, takie jak Windows Terminal lub PowerShell, które mają nieco inne zachowanie w odniesieniu do znaków Unicode.

Korzystanie z wbudowanego generatora

Tim zaczyna od prostego przykładu. W 0:37 pisze kod przy użyciu AnsiConsole.Status, aby wyświetlić znany styl ikony ładowania, podczas gdy w tle wykonywane są pewne operacje. Wybiera Spinner.Known.Aesthetic, ale zwraca uwagę, że Spectre oferuje wiele opcji na liście Spinner.Known. Tim dodaje ciąg znaków "Loading", który ma być wyświetlany obok wskaźnika, aby użytkownik wiedział, co się dzieje.

W bloku statusu Tim wstawia Thread.Sleep(10000) — dziesięć sekund — wyłącznie w celach testowych. To wymusza na konsoli wyświetlanie ikony ładowania przez wystarczająco długi czas, aby można było ją dostrzec. W 1:23 wyjaśnia, że po zakończeniu zadania ikona ładowania znika automatycznie. Jest to domyślny wzorzec zalecany przez Spectre do wyświetlania statusu lub postępu w aplikacji konsolowej.

W kierunku niestandardowego spinnera

W 1:41 Tim mówi: "OK, stwórzmy niestandardowy spinner", pokazując, jak wyjść poza wbudowane opcje. Wyjaśnia, że czasami chcesz sformatować lub dostosować styl swojego spinnera tak, aby pasował do Twojego projektu, kolorów marki, a nawet typu przetwarzanych danych. Pisząc własną klasę spinnera, kontrolujesz ramki, czas oraz to, czy używa ona znaków Unicode, czy nie.

Tworzenie klasy Spinner

Tim tworzy nowy plik o nazwie TestSpinner.cs. O 2:05 autor ustawia klasę jako publiczną i nakazuje jej dziedziczenie po abstrakcyjnej klasie Spinner w bibliotece Spectre. Wykorzystuje on funkcję "implement abstract class" programu Visual Studio do generowania wymagańych elementów. W tym miejscu należy podać własne wartości — takie jak prędkość, klatki na sekundę i ustawienia Unicode — zamiast korzystać z wartości domyślnych.

W 2:18 Tim podkreśla, że są to właściwości tylko do odczytu, co ułatwia pisanie elementów składowych z wyrażeniami. Ten format sprawia, że definicja spinnera jest zwięzła i łatwiejsza do utrzymania lub aktualizacji w przyszłości.

Kontrola prędkości na klatkę

O 2:30 Tim ustawia właściwość timing na TimeSpan.FromMilliseconds(200). Oznacza to, że wirnik będzie poruszał się z prędkością około pięciu klatek na sekundę. Wyjaśnia, że można wybrać inną wartość, jeśli chcesz, aby wskaźnik działał szybciej lub wolniej. Dostosowanie tego ustawienia to prosty sposób na poprawę wyglądu animacji ładowania w zależności od tego, co robi polecenie lub proces.

Obsługa znaków Unicode

O godz. 15:00 Tim porusza kluczową kwestię: Unicode. Zwraca uwagę, że podczas uruchamiania projektu w konsoli wbudowanej w Visual Studio znaki Unicode mogą nie wyświetlać się poprawnie, powodując błędy lub brakujące symbole. Jednak jeśli uruchomisz ten sam projekt w Windows Terminal lub PowerShell, Unicode i emoji zazwyczaj wyświetlają się poprawnie. W swoim demo ustawia tę właściwość na false, aby uniknąć tego problemu, ale zaznacza, że można ustawić ją na true, jeśli terminal to obsługuje.

Ułatwia to dodawanie do aplikacji kolorowych symboli, strzałek, a nawet wskaźników postępu opartych na emoji. Możesz formatować ramki za pomocą ✅, 🌧, 🔄 lub dowolnych znaków, aby zapewnić bogatsze informacje.

Określenie ram

Kolejną właściwością jest lista ramek. O 3:34 Tim pisze funkcję strzałkową zwracającą tablicę ciągów znaków. Każdy ciąg znaków stanowi jedną "klatkę" animacji. W swoim przykładzie używa dużej litery "O" i kilku małych liter "o", aby symulować ruch wzdłuż linii.

Kopiuje i wkleja ramkę bazową pięć razy, a następnie o 4:12 zastępuje jedną literę "O" w innym miejscu w każdej ramce. Powstaje prosta animacja: duża litera "O" wydaje się przesuwać od lewej do prawej, a następnie wraca do początku. Tim zauważa w 4:26, że można dodać więcej ramek, aby odwrócić kierunek, zastosować formatowanie kolorów (Spectre obsługuje rozbudowane znaczniki, takie jak [green]text[/]), lub eksperymentować ze znakami Unicode, jeśli konsola to obsługuje.

Oto kod klasy TestSpinner autorstwa Tima:

using Spectre.Console;

namespaces SpectreDemos;

public class TestSpinner : Spinner
{
    public override TimeSpan Interval => TimeSpan.FromMilliseconds(200);

    public override bool IsUnicode => false;

    public override IReadOnlyList<string> Frames => 
    [
        "Ooooo",
            "oOooo",
            "ooOoo",
            "oooOo",
            "ooooO"
    ]
}
using Spectre.Console;

namespaces SpectreDemos;

public class TestSpinner : Spinner
{
    public override TimeSpan Interval => TimeSpan.FromMilliseconds(200);

    public override bool IsUnicode => false;

    public override IReadOnlyList<string> Frames => 
    [
        "Ooooo",
            "oOooo",
            "ooOoo",
            "oooOo",
            "ooooO"
    ]
}

Wdrażanie i testowanie niestandardowego spinnera

Po zdefiniowaniu klasy Tim wraca do swojego głównego programu. O 4:42 zastępuje Spinner.Known.Aesthetic nowym TestSpinner(). To wszystko — nie są wymagańe żadne inne zmiany w kodzie. Następnie uruchamia aplikację o 4:52, aby pokazać działanie nowego wskaźnika ładowania.

Spectre Console Custom Waiting Spinner 1 related to Wdrażanie i testowanie niestandardowego spinnera

Ten etap testowania jest ważny. Tim zaleca uruchamianie projektu w tym samym terminalu, z którego będą korzystać użytkownicy, aby można było wcześnie wykryć problemy z kodowaniem, kolorami lub synchronizacją. Różne powłoki i czcionki mogą wpływać na wygląd spinnera.

Spectre Console Custom Waiting Spinner 2 related to Wdrażanie i testowanie niestandardowego spinnera

Dodawanie znaków Unicode, emoji i kolorów

Tim wyjaśnia w 5:00, że nic nie stoi na przeszkodzie, aby używać emotikonów lub znaków specjalnych jako ramek, jeśli włączysz Unicode. Możesz stworzyć wskaźnik pogody, zielony pasek postępu przy użyciu znaczników Spectre lub dowolny kreatywny element wyświetlania, który pasuje do Twojej aplikacji. Jest to szczególnie przydatne w przypadku poleceń, których uruchomienie lub kontynuacja działania zajmuje dużo czasu, ponieważ użytkownicy cenią sobie jasne wizualne informacje zwrotne.

Zauważa również, że Spectre Console ułatwia dodawanie kolorów i sformatowanego tekstu do spinnera. Na przykład, obok ikony ładowania można umieścić napis [green]Loading...[/] w celu podkreślenia powodzenia operacji lub w razie potrzeby wyróżnić błędy czerwonym tekstem.

Wskazówki dotyczące wydajności i ustawienia

O 5:19 Tim podsumowuje kluczowe elementy potrzebne do stworzenia niestandardowego spinnera:

  • Czas: jak długo wyświetlana jest każda klatka.

  • IsUnicode: czy używać Unicode/emoji, czy zwykłego tekstu.

  • Ramki: tablica ciągów znaków, które animujesz.

Ostrzega, że zbyt duża liczba klatek lub zbyt mała prędkość oznacza, że użytkownicy mogą nigdy nie zobaczyć ostatnich klatek, chyba że proces jest bardzo długi. Wybór odpowiednich opcji sprawi, że Twój spinner będzie bardziej efektywny. Te ustawienia ułatwiają również rozbudowę projektu w miarę upływu czasu — możesz dodać więcej klatek lub dostosować synchronizację bez konieczności przepisywania całej aplikacji konsolowej.

Podsumowanie

O 5:38 Tim pokazuje, że dziedzicząc po klasie Spinner i podając własne wartości, można szybko zbudować niestandardowy wskaźnik ładowania dla konsoli lub narzędzi opartych na PowerShellu. Dzięki temu zyskujesz większą kontrolę nad informacjami i wrażeniami, jakie przekazujesz użytkownikom. O 5:47 przypomina widzom, że kod źródłowy i dokumentacja znajdują się w opisie filmu, dzięki czemu można samodzielnie je przeglądać i rozbudowywać.

Wnioski

Zgodnie z filmem Tima Coreya widzieliśmy dokładnie, jak zaimplementować niestandardowy wskaźnik ładowania w konsoli Spectre: dziedziczyć po klasie Spinner, podać wartość czasu, określić obsługę Unicode i zdefiniować ramki. Następnie wystarczy zastąpić znany spinner nową klasą, aby dodać ją do projektu. Tim wskazuje również sposoby dodawania znaków Unicode, emoji i oznaczeń kolorów, aby wyświetlanie statusu i postępu aplikacji konsolowej było bardziej informacyjne i estetyczne.

Korzystając z możliwości Spectre Console, możesz zapewnić bardziej przejrzystą informację zwrotną, szybciej wykrywać i naprawiać problemy oraz tworzyć piękne aplikacje konsolowe, które przypadną do gustu użytkownikom.

Hero Worlddot related to Niestandardowy spinner oczekiwania - seria Spectre Console
Hero Affiliate related to Niestandardowy spinner oczekiwania - 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