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

Andere Kategorien

Live-Statusmeldungen und Spinner - Spectre Console Series

Tim Corey
9m 31s

Spectre Console ist eine leistungsstarke .NET-Bibliothek, mit der Sie schöne Konsolenanwendungen erstellen können, ohne C# zu verlassen. In seiner Videoserie geht Tim Corey die einzelnen Funktionen durch. In diesem Video über "Live-Statusmeldungen und Spinner - Spectre Console Series" konzentriert sich Tim auf Spectre Console Status, ein Tool zur Anzeige von Live-Statusmeldungen und animierten Spinnern, während eine Konsolenanwendung eine lang laufende Aufgabe ausführt.

In diesem Artikel werden wir die Statusfunktion von Spectre Console anhand von Tims Erklärungen genauer unter die Lupe nehmen. Sie werden sehen, wie Tim zunächst einen einfachen Loading Spinner einrichtet, ihn dann anpasst und ihn schließlich in einem realistischeren, asynchronen Beispiel zum Herunterladen von Daten verwendet. Am Ende der Demo werden Sie sehen, wie Spectre Console es einfacher macht, dem Benutzer klare Informationen darüber zu geben, was hinter den Kulissen passiert.

Beginnen Sie mit einem einfachen Statusbeispiel (0:31)

Tim beginnt damit, die einfachsten Beispiele einer Statusmeldung zu zeigen. Er ruft an:

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

Dies ist die einfachste Möglichkeit, einem Konsolenprojekt einen Statusindikator hinzuzufügen. Er erklärt, dass man innerhalb der geschweiften Klammern beliebige Befehle ausführen oder beliebigen Code ausführen kann, der Zeit benötigt. Für die Demo verwendet Tim lediglich einen drei Sekunden dauernden Ruhezustand, um einen langsamen Vorgang zu simulieren.

Wenn Sie diese Konsolenanwendung ausführen, sehen Sie sofort die Zeichenfolge "Loading..." in der Zeile zusammen mit einem Standard-Spinner. Diese kurze Demo zeigt, wie Spectre Console sogar eine einfache Eingabeaufforderung in etwas Dynamischeres verwandeln kann.

Spectre Console Live Status Spinners 1 related to Beginnen Sie mit einem einfachen Statusbeispiel (0:31)

Anpassen des Spinners - Unterstützte Typen (1:54)

Bei 1:54 geht Tim zum Thema Anpassung über. Spectre Console verfügt über eine lange Liste integrierter Spinner-Typen, die Sie mit ändern können:

ctx.Spinner = Spinner.Known.Aesthetic;

Er blättert durch die verfügbaren Typen und wählt "Ästhetisch" aus, um zu zeigen, dass das Format des Spinners leicht geändert werden kann. Diese kleine Änderung lässt Ihre Konsolenanwendung schon viel besser aussehen.

Spectre Console Live Status Spinners 2 related to Anpassen des Spinners - Unterstützte Typen (1:54)

Tim weist bei 2:39 auch darauf hin, dass nicht jedes Terminal jeden Spinner vollständig unterstützt. Wenn Sie innerhalb von Visual Studio arbeiten, sehen Sie möglicherweise eine Fallback-Animation. Dies ist die Art und Weise, wie Spectre Console mit Fehlern umgeht: Es wählt automatisch einen einfacheren Spinner aus, der für Ihre Umgebung geeignet ist, sodass der Benutzer weiterhin eine Rückmeldung erhält.

Warum dies die Konsolenanwendungen für den Benutzer einfacher macht (3:07)

Bei 3:07 macht Tim eine Pause, um zu erklären, warum diese Funktion wichtig ist. Wenn Ihre Anwendung Dateien erstellt oder herunterlädt, Daten verarbeitet oder irgendetwas Zeitaufwändiges tut, lässt eine Statusmeldung mit einem Spinner den Benutzer wissen, dass etwas passiert" Ohne sie könnte eine leere Konsole wie eingefroren aussehen.

Tim betont, dass nach Abschluss der Aufgabe der Status verschwindet und nur die Ergebnisinformationen zurückbleiben. Dies trägt dazu bei, dass Ihre Konsolenanwendung sauber und gleichzeitig informativ bleibt.

Bewegen zu Await AnsiConsole für asynchrones Arbeiten (3:24)

Bis zu diesem Punkt hat Tim Start() verwendet. Aber in echten Anwendungen warten Sie wahrscheinlich auf Operationen. Bei 3:34 wechselt er zu:

await AnsiConsole.Status()
    .StartAsync("Laden...", async ctx =>
    {
        // asynchrone Arbeit
    });

Diese kleine Änderung - die Verwendung von await AnsiConsole und .StartAsync() - ermöglicht es Ihnen, asynchronen Code innerhalb des Statusblocks auszuführen. Tim weist bei 4:02 darauf hin, dass der Context Inside für UI-Updates nicht thread-sicher ist. Kehren Sie immer zum UI-Thread zurück, um den Spinner oder den Statustext zu ändern. Diese Prüfung vermeidet seltsame Fehler, wenn Sie versuchen, von einem anderen Thread aus zu aktualisieren.

Das Herunterladen von Daten in einer Schleife - eine realistischere Demo (4:26)

Als Nächstes erstellt Tim eine Schleife, um eine reale Aufgabe zu simulieren: das Herunterladen von 20 Kursen aus einer API. Er schreibt den Code so um, dass er wie folgt aussieht:

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

Hier zeigt er drei wichtige Funktionen der Spectre-Konsole im Zusammenspiel:

  • Context.Status() ändert dynamisch den neben dem Spinner angezeigten Status-String.

  • await Helpers.Fetch(...) stellt eine echte asynchrone Aufgabe innerhalb Ihrer Konsolenanwendung dar.

  • AnsiConsole.MarkupLine() verwendet das Markup von Spectre, um Farben hinzuzufügen. Tim wählt [red] nur aus, "um etwas zu tun zu haben, das Spaß macht."

Dieses Beispiel zeigt, wie einfach Sie einem Projekt ohne komplexen Code eine Fortschrittsrückmeldung hinzufügen können.

Besichtigung der laufenden Anwendung (7:21)

Wenn Tim den neuen Code ausführt, sehen Sie einen grünen Spinner (den Typ Aesthetic in seinem Thema) und den Statustext, der sich in "Downloading course 1...", "Downloading course 2..." usw. ändert. Wenn jeder Download abgeschlossen ist, erscheint eine rote Linie: "Kurs 1 heruntergeladen", "Kurs 2 heruntergeladen"

Spectre Console Live Status Spinners 3 related to Besichtigung der laufenden Anwendung (7:21)

Tim merkt an, dass dies eine großartige Möglichkeit ist, um Aufgaben wie das Hochladen von Daten oder die Verarbeitung von Dateien zu verfolgen. "Man hinterlässt die Ergebnismeldungen, aber man hat nicht mehr diese Wartemeldung beim Herunterladen", erklärt er bei 7:27.

Spectre Console Live Status Spinners 4 related to Besichtigung der laufenden Anwendung (7:21)

Synchron vs. Asynchron - kein Leistungsunterschied (8:00)

Um 8:00 Uhr spricht Tim die Leistung an. Die Verwendung von Start() gegenüber StartAsync() ändert nichts daran, wie schnell der Spinner animiert wird. Es ist nur wichtig, ob Ihr Code asynchron ist. Wenn Sie await verwenden, brauchen Sie .StartAsync(); ansonsten ist .Start() in Ordnung.

Das bedeutet, dass Sie Ihrer Konsolenanwendung Statusrückmeldungen hinzufügen können, ohne sich Gedanken über die Verlangsamung zu machen. Sie umhüllt einfach die Arbeit, die Sie bereits tun.

Eingebaute und benutzerdefinierte Spinner - eine lange Liste zum Überprüfen (8:45)

Abschließend hebt Tim hervor, dass Spectre Console "tonnenweise" integrierte Spinner bietet. Sie können durch die Liste blättern und sich das aussuchen, was Ihnen gefällt - alles von Punkten über Pfeile bis hin zu "ästhetisch" Später in der Serie wird Tim zeigen, wie Sie einen benutzerdefinierten Spinner erstellen, damit Sie das Branding oder die Farben Ihrer App vollständig anpassen können.

Diese Flexibilität ist ein Teil dessen, was Spectre Console zu einem großartigen Werkzeug für die Erstellung schöner Konsolenanwendungen macht. Sie gibt Ihnen Fortschrittsrückmeldungen, prompte Ausgaben und dynamische Grafiken, ohne das Rad neu zu erfinden.

Abschluss - Spectre Console Status in Aktion (9:07)

Anhand des Videos von Tim Corey haben wir gesehen, wie man Spectre Console Status zur Verbesserung einer .NET-Konsolenanwendung verwendet:

  • Verwenden Sie AnsiConsole.Status().Start() oder await AnsiConsole.Status().StartAsync(), um einen Spinner und Statustext anzuzeigen, während eine Aufgabe ausgeführt wird.

  • Aktualisieren Sie den context.Status() dynamisch innerhalb Ihrer Schleife.

  • Ausgabe der Ergebnisse mit AnsiConsole.MarkupLine() und Spectre-Markup für Rot, Grün oder andere Farben.

  • Wählen Sie aus einer integrierten Liste von Spinnern oder erstellen Sie später Ihre eigenen.

  • Der Benutzer muss klare Informationen erhalten und die Konsolenausgabe muss sauber bleiben.

Diese kleinen Korrekturen können ein gewöhnliches Konsolenprojekt in eine schöne Konsolenanwendung verwandeln. Die Statusfunktion von Spectre Console macht es einfacher, den Fortschritt mitzuteilen, Ergebnisse zu überprüfen und die Eingabeaufforderung Ihrer App freundlicher und interaktiver zu gestalten.

Hero Worlddot related to Live-Statusmeldungen und Spinner - Spectre Console Series
Hero Affiliate related to Live-Statusmeldungen und Spinner - Spectre Console Series

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