Zum Fußzeileninhalt springen
Iron Academy Logo
C#-Anwendung
C#-Anwendung

Andere Kategorien

Benutzerdefinierter Warte-Spinner - Spectre Console Serie

Tim Corey
6m 12s

Spectre Console ist eine .NET-Bibliothek, mit der Sie schöne Konsolenanwendungen mit reichhaltiger Ausgabe, Farbe und Formatierung erstellen können. Tim Corey beginnt sein Video "Build a Custom Waiting Spinner - Spectre Console Series" damit, dass er uns daran erinnert, dass Spectre Console einfache C#-Konsolenanwendungen in visuell ansprechendere und informativere Tools verwandelt. In dieser Lektion zeigt Tim, wie man einen benutzerdefinierten Loading Spinner implementiert - eine kleine, aber leistungsstarke Funktion, mit der die Status- und Fortschrittsanzeigen Ihres Konsolenprogramms leichter zu verfolgen sind.

Tim erklärt bei 0:16, dass der Quellcode für das Projekt unterhalb des Videos verlinkt ist. Er ermutigt die Betrachter, die Software selbst zu testen und mit ihr zu experimentieren, Einstellungen zu ändern oder Funktionen hinzuzufügen, um zu verstehen, wie sie in ihrer eigenen Umgebung funktioniert. Dies ist besonders hilfreich, wenn Sie verschiedene Terminals unterstützen möchten, wie Windows Terminal oder PowerShell, die sich bei Unicode-Zeichen leicht unterschiedlich verhalten.

Verwendung eines eingebauten Spinners

Tim beginnt mit einem einfachen Beispiel. Bei 0:37 schreibt er Code mit AnsiConsole.Status, um einen bekannten Spinner-Stil anzuzeigen, während im Hintergrund einige Arbeiten ausgeführt werden. Er wählt Spinner.Known.Aesthetic, weist aber darauf hin, dass Spectre viele Optionen in der Liste Spinner.Known bietet. Tim fügt eine Zeichenfolge "Loading" hinzu, die neben dem Spinner angezeigt wird, damit der Benutzer weiß, was gerade passiert.

Innerhalb des Statusblocks fügt Tim einen Thread.Sleep(10000) ein - zehn Sekunden - nur zum Testen. Dies zwingt die Konsole dazu, den Spinner lange genug in Aktion zu zeigen, um ihn zu sehen. Er erklärt bei 1:23, dass der Spinner automatisch verschwindet, sobald die Aufgabe abgeschlossen ist. Dies ist das Standardmuster, das Spectre für die Anzeige von Status oder Fortschritt in einer Konsolenanwendung empfiehlt.

Bewegung hin zu einem benutzerdefinierten Spinner

Bei 1:41 sagt Tim: "Okay, lasst uns einen benutzerdefinierten Spinner erstellen" und zeigt, wie man über die eingebauten Optionen hinausgehen kann. Er erklärt, dass Sie Ihren Spinner manchmal so formatieren oder gestalten möchten, dass er zu Ihrem eigenen Projekt, Ihren Markenfarben oder sogar zu der Art von Daten passt, die Sie verarbeiten. Indem Sie Ihre eigene Spinner-Klasse schreiben, können Sie die Rahmen und das Timing steuern und bestimmen, ob Unicode-Zeichen verwendet werden oder nicht.

Erstellen der Spinner-Klasse

Tim erstellt eine neue Datei mit dem Namen TestSpinner.cs. Bei 2:05 macht er die Klasse öffentlich und legt fest, dass sie von der abstrakten Spinner-Klasse von Spectre erbt. Er verwendet die Funktion "Abstrakte Klasse implementieren" von Visual Studio, um die erforderlichen Mitglieder zu generieren. Hier geben Sie Ihre eigenen Werte an - wie Geschwindigkeit, Frames und Unicode-Einstellungen - anstatt Standardwerte zu verwenden.

Tim hebt bei 2:18 hervor, dass es sich hierbei um "get-only"-Eigenschaften handelt, was das Schreiben von ausdrucksbehafteten Mitgliedern vereinfacht. Durch dieses Format bleibt Ihre Spinner-Definition kompakt und lässt sich später leichter pflegen oder aktualisieren.

Kontrolle der Geschwindigkeit pro Frame

Um 2:30 Uhr setzt Tim die Timing-Eigenschaft auf TimeSpan.FromMilliseconds(200). Das bedeutet, dass sich der Spinner mit etwa fünf Bildern pro Sekunde bewegen wird. Er erklärt, dass Sie einen anderen Wert auswählen können, wenn Sie möchten, dass der Spinner schneller oder langsamer läuft. Die Anpassung dieser Einstellung ist ein einfacher Weg, um das Gefühl Ihrer Ladeanimation zu verbessern, je nachdem, was Ihr Befehl oder Prozess gerade tut.

Handhabung von Unicode-Zeichen

Um 3:00 Uhr spricht Tim ein wichtiges Thema an: Unicode. Er weist darauf hin, dass bei der Ausführung Ihres Projekts in der integrierten Konsole von Visual Studio Unicode-Zeichen möglicherweise nicht korrekt wiedergegeben werden und Fehler oder fehlende Symbole verursachen. Wenn Sie jedoch dasselbe Projekt in Windows Terminal oder PowerShell ausführen, werden Unicode und Emoji im Allgemeinen problemlos angezeigt. In seiner Demo setzt er die Eigenschaft auf false, um dieses Problem zu vermeiden, weist aber darauf hin, dass Sie sie auf true setzen können, wenn Ihr Terminal dies unterstützt.

Das macht es einfacher, bunte Symbole, Pfeile oder sogar Emoji-basierte Fortschrittsanzeigen in Ihre App einzufügen. Sie können Rahmen mit ✅, 🌧, 🔄 oder anderen Zeichen formatieren, um mehr Informationen bereitzustellen.

Bestimmen des Rahmens

Die nächste Eigenschaft ist die Frame-Liste. Bei 3:34 schreibt Tim eine Pfeilfunktion, die ein Array von Zeichenketten zurückgibt. Jeder String ist ein "Frame" des Spinners. In seinem Beispiel verwendet er ein großes "O" und mehrere kleine "o "s, um die Bewegung über die Linie zu simulieren.

Er kopiert und fügt das Basisbild fünfmal ein und ersetzt dann bei 4:12 ein "O" an einer anderen Stelle in jedem Bild. So entsteht eine einfache Animation: Das große "O" scheint sich von links nach rechts zu bewegen und kehrt dann in einer Schleife an den Anfang zurück. Tim merkt bei 4:26 an, dass Sie weitere Rahmen hinzufügen können, um die Richtung umzukehren, Farbformatierungen hinzuzufügen (Spectre unterstützt Rich Markup wie [green]text[/]) oder mit Unicode-Zeichen zu experimentieren, wenn Ihre Konsole dies unterstützt.

Hier ist der Code der Klasse TestSpinner von Tim:

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"
    ]
}

Implementierung und Test des Custom Spinner

Sobald die Klasse definiert ist, wechselt Tim zurück zu seinem Hauptprogramm. Bei 4:42 ersetzt er Spinner.Known.Aesthetic durch new TestSpinner(). Das war's - keine weiteren Änderungen am Code erforderlich. Anschließend führt er die Anwendung bei 4:52 aus, um den neuen Spinner in Aktion zu zeigen.

Spectre Console Custom Waiting Spinner 1 related to Implementierung und Test des Custom Spinner

Dieser Testschritt ist wichtig. Tim empfiehlt, das Projekt auf demselben Terminal laufen zu lassen, das auch die Benutzer verwenden werden, damit Sie Probleme mit der Kodierung, den Farben oder dem Timing frühzeitig erkennen können. Unterschiedliche Shells und Schriftarten können das Erscheinungsbild Ihres Spinners beeinflussen.

Spectre Console Custom Waiting Spinner 2 related to Implementierung und Test des Custom Spinner

Einfügen von Unicode, Emojis und Farbe

Tim erklärt um 5:00 Uhr, dass Sie nichts daran hindert, Emojis oder Sonderzeichen als Rahmen zu verwenden, wenn Sie Unicode aktivieren. Sie könnten eine Wetteranzeige, einen grünen Fortschrittsbalken mit dem Markup von Spectre oder eine andere kreative Anzeige erstellen, die zu Ihrer Anwendung passt. Dies ist besonders nützlich für Befehle, die lange brauchen, um zu starten oder weiterzulaufen, da die Benutzer eine klare visuelle Rückmeldung schätzen.

Er weist auch darauf hin, dass es mit Spectre Console einfacher ist, Farben und formatierten Text zu Ihrem Spinner hinzuzufügen. Sie könnten zum Beispiel [green]Loading...[/] neben den Spinner schreiben, um den Erfolg zu betonen, oder bei Bedarf Fehler mit rotem Text hervorheben.

Leistungstipps und Einstellungen

Bei 5:19 fasst Tim die wichtigsten Dinge zusammen, die Sie für einen benutzerdefinierten Spinner benötigen:

  • Zeit: wie lange jedes Bild angezeigt wird.

  • IsUnicode: ob Unicode/Emoji oder reiner Text verwendet werden soll.

  • Frames: das Array von Zeichenketten, die Sie animieren.

Er warnt davor, dass zu viele Frames oder eine zu langsame Geschwindigkeit bedeutet, dass die Benutzer möglicherweise nie die letzten Frames sehen, es sei denn, Ihr Prozess ist sehr lang. Wenn Sie hier die richtigen Optionen auswählen, wird Ihr Spinner effektiver. Diese Einstellungen machen es auch einfacher, Ihr Projekt im Laufe der Zeit zu erweitern - Sie können mehr Frames hinzufügen oder das Timing anpassen, ohne Ihre gesamte Konsolenanwendung neu zu schreiben.

Zusammenfassung

Bei 5:38 zeigt Tim, dass Sie durch das Erben von der Spinner-Klasse und das Bereitstellen Ihrer eigenen Werte schnell einen benutzerdefinierten Ladeindikator für Ihre Konsole oder PowerShell-basierten Tools erstellen können. So haben Sie mehr Kontrolle über die Informationen und das Gefühl, das Sie Ihren Nutzern vermitteln. Bei 5:47 erinnert er die Zuschauer daran, dass der Quellcode und die Dokumentationen in der Videobeschreibung zu finden sind, damit Sie sie selbst erforschen und erweitern können.

Abschluss

Anhand des Videos von Tim Corey haben wir genau gesehen, wie man einen benutzerdefinierten Lade-Spinner für die Spectre-Konsole implementiert: von Spinner erben, einen Zeitwert bereitstellen, Unicode-Unterstützung angeben und eigene Frames definieren. Ersetzen Sie dann einfach eine bekannte Spinner-Klasse durch Ihre neue Klasse, um sie zu Ihrem Projekt hinzuzufügen. Tim zeigt auch Möglichkeiten auf, wie Sie Unicode-Zeichen, Emojis und Farbmarkierungen hinzufügen können, um die Status- und Fortschrittsanzeigen Ihrer Konsolenanwendung informativer und schöner zu gestalten.

Durch die Nutzung der Funktionen von Spectre Console können Sie klareres Feedback geben, Probleme früher finden und beheben und schöne Konsolenanwendungen erstellen, die den Benutzern gefallen.

Hero Worlddot related to Benutzerdefinierter Warte-Spinner - Spectre Console Serie
Hero Affiliate related to Benutzerdefinierter Warte-Spinner - Spectre Console Serie

Verdienen Sie mehr, indem Sie teilen, was Sie lieben

Erstellen Sie Inhalte für Entwickler, die mit .NET, C#, Java, Python oder Node.js arbeiten? Verwandeln Sie Ihr Fachwissen in ein zusätzliches Einkommen!

Iron Support Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an