Canlı Durum Mesajları ve Çarklar - Spectre Console Serisi
Spectre Console, C#'dan çıkmadan güzel konsol uygulamaları oluşturmanıza olanak tanıyan güçlü bir .NET kütüphanesidir. Tim Corey, video serisinde özelliklerini teker teker anlatıyor. "Canlı Durum Mesajları ve Döndürücüler - Spectre Console Serisi" adlı bu videoda, Tim, konsol uygulaması uzun süre görev yürütürken canlı durum mesajlarını ve animasyonlu döndürücüler gösterme aracı olan Spectre Console Durumu'na odaklanıyor.
Bu makalede, Tim'in açıklamalarıyla birlikte Spectre Console'un durum özelliğine daha derinlemesine bakacağız. Tim'in basit bir yükleme döndürücüsünü nasıl kurduğunu, ardından özelleştirdiğini ve nihayetinde veri indirimi için daha gerçekçi, asenkron bir örnekte kullandığını göreceksiniz. Demonun sonunda, Spectre Console'un perde arkasında neler olduğunu kullanıcıya açıkça bildirmeyi nasıl kolaylaştırdığını göreceksiniz.
Daha Basit Bir Durum Örneği ile Başlamak (0:31)
Tim, bir durum mesajının en basit örneklerini göstererek başlar. Çağırıyor:
AnsiConsole.Status()
.Start("Yükleniyor...", ctx =>
{
Thread.Sleep(3000);
});Konsol projesine bir durum göstergesi eklemenin en basit yolu budur. Küme parantezlerinin içinde, zaman alan herhangi bir komutu veya kodu çalıştırabileceğinizi açıklar. Demo için, Tim yavaş bir işlemi simüle etmek üzere üç saniyelik bir uyku kullanıyor.
Bu konsol uygulaması çalıştırıldığında, hemen satırda "Yükleniyor…" dizisini ve varsayılan bir döndürücü görüyorsunuz. Bu hızlı demo, Spectre Console'un basit bir istemi bile daha dinamik hale getirebileceğini gösteriyor.

Döndürücüyü Özelleştirmek – Desteklenen Türler (1:54)
1:54'te Tim özelleştirmeye geçiyor. Spectre Console, yerleşik döndürücü türlerinin uzun bir listesi ile gelir ve bunları şu şekilde değiştirebilirsiniz:
ctx.Spinner = Spinner.Known.Aesthetic;Kullanılabilir türlerde geziniyor ve döndürücünün biçiminin kolayca değiştirilebileceğini göstermek için "Aesthetic"i seçiyor. Bu tür küçük bir değişiklik bile konsol uygulamanızı daha istifli gösterebilir.

Tim ayrıca 2:39'da her terminalin her döndürücüyü tam olarak desteklemediğine dikkat çekiyor. Visual Studio içinde çalışıyorsanız, bir geri dönüş animasyonu görebilirsiniz. Bu, Spectre Console'un hataları ustaca ele alma yoludur—kullanıcının hala geri bildirim alabilmesi için ortamınıza uygun daha basit bir döndürücü otomatik olarak seçilir.
Bu Özelliğin Kullanıcı İçin Konsol Uygulamalarını Kolaylaştırmasının Nedeni (3:07)
3:07'de Tim, bu özelliğin neden önemli olduğunu açıklamak için duraklıyor. Uygulamanız dosya oluşturuyorsa veya indiriyorsa, veri işliyorsa veya zaman alan bir şey yapıyorsa, bir döndürücü ile birlikte bir durum mesajı "kullanıcıya bir şeylerin olduğunu bildirir." Olmazsa, boş bir konsol donmuş gibi görünebilir.
Tim, görev tamamlandığında durumun kaybolduğunu ve sadece sonuç bilgisinin geride kaldığını vurguluyor. Bu, konsol uygulamanızın aynı anda temiz ve bilgilendirici kalmasına yardımcı olur.
Asenkron Çalışma için Await AnsiConsole'a Geçmek (3:24)
Bu noktaya kadar Tim, Start()'ı kullanmıştır. Ancak gerçek uygulamalarda, muhtemelen işlemleri beklemektesiniz. 3:34'te şuna geçiyor:
await AnsiConsole.Status()
.StartAsync("Yükleniyor...", async ctx =>
{
// asenkron çalışma
});Bu küçük değişiklik—await AnsiConsole ve .StartAsync() kullanarak—durum bloğu içinde asenkron kod çalıştırmanıza olanak tanır. Tim, 4:02'de bağlamın içinde kullanıcı arayüzü güncellemeleri için güvenli olmadığını belirtir. Her zaman döndürücüyü veya durum metnini değiştirmek için "kullanıcı arayüzü dizisine geri dönün." Başka bir diziden güncellemeye çalıştığınızda garip hatalardan kaçınır.
Döngüde Veri İndirmek – Daha Gerçekçi Bir Demo (4:26)
Sonrasında, Tim gerçek dünya görevlerini simüle etmek için 20 dersi bir API'den indirmeyi simüle etmek için bir döngü oluşturuyor. Kodu şu şekilde yeniden yazıyor:
for (int i = 1; i < 21; i++)
{
ctx.Status($"Kurs {i} indiriliyor...");
var jsonResponse = await Helpers.Fetch($"https://sample.com/courses/{i}");
AnsiConsole.MarkupLine($"[red]Kurs {i} indirildi[/]");
}Burada üç önemli Spectre Console özelliğini bir arada gösteriyor:
Context.Status() döndürücünün yanına gösterilen durum dizisini dinamik olarak değiştirir.
await Helpers.Fetch(...) konsol uygulamanız içindeki gerçek bir asenkron görevi temsil eder.
- AnsiConsole.MarkupLine() renk eklemek için Spectre'nin işaretlemesini kullanır. Tim, sadece "yapacak eğlenceli bir şey olsun diye" [red] rengini seçiyor.
Bu örnek, karmaşık bir kod yazmaya gerek kalmadan projeye ilerleme geri bildirimi eklemenin ne kadar kolay olduğunu gösteriyor.
Çalışan Uygulamayı Görmek (7:21)
Tim yeni kodu çalıştırdığında, bir yeşil döndürücüyü (onun temasındaki Aesthetic türü) ve "Kurs 1 indiriliyor...", "Kurs 2 indiriliyor..." gibi durum metninin değiştiğini görüyorsunuz. Her indirme tamamlandığında kırmızı bir satır görünüyor: "Kurs 1 indirildi", "Kurs 2 indirildi."

Tim, bunun veri yükleme veya dosya işleme gibi görevleri takip etmenin harika bir yolu olduğunu belirtiyor. "Sonuç mesajlarını geride bırakıyorsunuz, ancak artık indirilenle ilgili o bekleme mesajı yok," diyor 7:27'de.

Eşzamanlı vs. Asenkron – Performans Farkı Yok (8:00)
8:00'de Tim performansı ele alıyor. Start() kullanmak ile StartAsync() kullanmak, döndürücünün ne kadar hızlı animasyon gösterdiğini değiştirmez. Sadece, içindeki kodunuzun asenkron olup olmadığını içerir. await kullanıyorsanız, .StartAsync() gerektiğini belirtiyor; aksi takdirde, .Start() yeterlidir.
Bu, konsol uygulamanıza durum geri bildirimi ekleyebileceğiniz anlamına gelir, hızını yavaşlatmaktan endişe etmeden. Basitçe, zaten yaptığınız işi sarar.
Yerleşik ve Özel Döndürücüler – Kontrol Edilecek Uzun Bir Liste (8:45)
Kapanırken, Tim Spectre Console'un "tonlarca" yerleşik döndürücü sağladığını vurguluyor. Listede gezinebilir ve beğendiğiniz birini seçebilirsiniz—noktalar, oklar, "estetik" gibi her şey. Serinin ilerleyen bölümlerinde, Tim, özel bir döndürücü oluşturmayı gösterecek, böylece uygulamanızın markasına veya renklerine tam olarak uyacak şekilde uyarlayabilirsiniz.
Bu esneklik, Spectre Console'un güzel konsol uygulamaları oluşturmak için harika bir araç olmasının bir parçasıdır. Yankı çıkarmadan ilerleme geri bildirimi, istem çıkanları ve dinamik görseller verir.
Sonuç – Spectre Console Durumu Uygulamada (9:07)
Tim Corey'nin videosunu takip ederek, Spectre Console Durumu'nu bir .NET konsol uygulamasını geliştirmenin nasıl kullanıldığını gördük:
AnsiConsole.Status().Start() veya await AnsiConsole.Status().StartAsync() kullanarak bir görev yürütülürken döndürücü ve durum metni gösterin.
Döngünüzde bağlam.Status()'u dinamik olarak güncelleyin.
Sonuçları AnsiConsole.MarkupLine() ve kırmızı, yeşil veya diğer renkler için Spectre işaretlemesi ile çıkarın.
Yerleşik bir döndürücü listesi arasından seçim yapın veya daha sonra kendi özelinizi oluşturun.
- Kullanıcıya temiz bir konsol çıktısını korurken net bilgi sağlayın.
Bu küçük dokunuşlar, sıradan bir konsol projesini güzel bir konsol uygulamasına dönüştürebilir. Spectre Console'un durum özelliği, ilerlemeyi paylaşmayı, sonuçları kontrol etmeyi ve uygulamanızın istemini daha samimi ve daha etkileşimli hale getirmeyi basit hale getirir.

