Altbilgi içeriğine atla
Iron Academy Logo
C# Uygulaması
C# Uygulaması

Diğer Kategoriler

Hayrettin Grafikler - Spectre Console Serisi

Tim Corey
7d 04s

Spectre.Console kütüphanesi, sıradan C# konsol uygulamalarını görsel olarak çekici ve bilgilendirici araçlara dönüştürmekle ilgilidir. En dikkat çeken özelliklerinden biri, uygulamanız çalışırken güncellenen ilerleme çubuklarını gösterebilme yeteneğidir. Bu, kullanıcının bilgilendirilmesini sağlamak istediğiniz uzun süreli işler için son derece faydalıdır.

Tim Corey, "Canlı İlerleme Çubukları – Spectre Console Serisi" videosunda, C# Spectre Console ilerleme çubuğunu adım adım nasıl oluşturulacağını gösteriyor.

Konsol Uygulamasını Kurma

Videonun başında (0:00) Tim, Spectre.Console konsol kütüphanesini tanıtır ve kaynak kodun bağlantısının videonun altında bulunduğunu gösterir. İzleyicilere bunların gününüze sığdırabileceğiniz 10 dakikalık parçalardan oluştuğunu hatırlatıyor.

Tim, normal bir C# konsol uygulamasında çalışıyor — Program sınıfı ve static void Main(string[] args) ile basit bir şablon dosyası düşünün. Herhangi bir özel UI framework kullanmıyor, sadece Spectre.Console için bir NuGet paketi referansı kullanıyor. Bu, bu özellikleri herhangi bir Windows Terminal veya konsol sunucusuna getirebileceğinizin iyi bir hatırlatıcısıdır.

İlerleme Bağlamını Oluşturma

0:34'te Tim kodlamaya başlar. Main yönteminde, AnsiConsole.Progress() ve ardından bunun üzerinde .Start() çağırır. Bu, Spectre.Console'da bir ilerleme çubuğu için standart giriş noktasıdır.

O, bir bağlam parametresi ile lambda geçirdiğinizi gösteriyor; bu, daha sonra asenkron hale getirdiğinizde async ctx olarak düşünebileceğiniz bir şeydir. Bu bağlam içinde görevlerinizi tanımlarsınız. Bu, Spectre.Console'da ilerleme görevlerinizi güncellemeye başlamadan önce ayarlamanızın eşdeğeridir.

İlerleme Görevleri Ekleme

Tim üç ilerleme görevi oluşturur:

"Veri İndirme"

"Uygulama Yükleme"

"Veri Temizleme"

Her biri var task = context.AddTask("…") ile eklenir. Bunlar, daha sonra artırabileceğiniz görev tanıtıcılarını döndürür. Tim, notlarında (1:22), sadece yüzeyini kazıdığına dikkat çekiyor—Spectre.Console, stil, sütun ve yerleşim gibi farklı özellikleri destekler; örneğin, çubuğunuzu özelleştirmek için yeni bir ProgressBarColumn, yeni bir PercentageColumn, yeni bir SpinnerColumn veya yeni bir TaskDescriptionColumn ekleyebilirsiniz.

Görevleri Visual Studio'nun yükleyicisine benzetiyor: indirme, yükleme, ardından temizleme (1:42). Her görevin, güncellendikçe dahili olarak bir int yüzdesi veya int değeri tuttuğunu hayal edebilirsiniz.

İlerleme Çubuklarını Güncelleme

1:50'de Tim, bağlam tamamlanana kadar çalışacak bir while döngüsü kurar. Gerçek bir C konsol programında, Main yöntemi içinde while (!context.IsFinished) veya while (context.IsFinished == false) yazabilirsiniz.

Döngünün içinde, işleri yavaşlatmak için Thread.Sleep(500) çağrısı yapar (2:15). Daha sonra rastgele bir double değeri maksimum bir değerle çarparak task.Increment() çağrısı yapar (2:29, 2:47). Bu, yapılan işi simüle eder.

O, birinci ve ikinci görevleri farklı hızlarda günceller ve üçüncü görev için, ancak ikinci görevin yüzdesi %80'i geçtikten sonra başlaması için bir 'if' kontrolü ekler (3:05). Bu, esasen ilerleme görevleri arasındaki bağımlılıkları kontrol etmektedir.

Tim her ne kadar bir foreach döngüsüne literal olarak int i yazmasa da, birini kullanarak görevler üzerinde yineleme yapmayı ve her biri için .Increment(int) çağrısı yapmayı hayal edebilirsiniz. Üretim ortamında, bir dosya indiren bir var client ya da işlenen bir string dosya adı gibi gerçek veriler olabilir. Tim, görüntülemeyi göstermek için rastgele sayılarla basit tutar.

İlerleme Çubuklarını Görüntüleme ve İzleme

Tim, 3:47'de konsol uygulamasını çalıştırır. İlerleme çubukları üst üste görünüyor. Her bir çubuk, sonunda bir yüzde gösterir ve tamamlandığında yeşile döner (4:01). İlk görevler tamamlandıktan sonra, "Veri Temizliği" başlar.

4:14'te Tim, imlecin konsolun en altına döndüğünü, küçük ama önemli bir kullanılabilirlik detayı olarak belirtiyor. Spectre.Console ilerleme çubuğu, durumu otomatik olarak biçimlendirir ve her şeyi titreme olmadan sabit tutar.

Await Görevi ile Asenkron Çalışma

4:36'da Tim, asenkron bir sürüm göstermek için yön değiştiriyor. O, .Start()'ı .StartAsync() olarak değiştirir ve lambda'yı async olarak işaretler. Artık context parametresi, async ctx gibi davranıyor.

İçeride, Thread.Sleep yerine await Task.Delay(500) (4:58) kullanıyor. Bu, beklerken denetimi sisteme geri verir. Gerçek bir programda, çubukla birlikte durum metni yazdırmak için await client.DownloadAsync() veya await AnsiConsole.MarkupAsync() gibi gerçek bir işlemi bekliyor olabilirsiniz.

Async versiyonu görsel olarak tam olarak aynı şekilde çalışır (5:16–5:23), ancak modern async iş akışları için daha uygundur. Tim bunu göstermiyor, ancak beklenen görevlerinizin etrafında try/catch (Exception ex) kullanarak istisnaları da yakalayabilirsiniz.

Spectre Console Live Progress Bars 1 related to Await Görevi ile Asenkron Çalışma

Otomatik Temizleme ve Tamamlama

Tim, varsayılan olarak Spectre.Console'un tamamlanan görevleri ekranda %100 olarak bıraktığını fark eder. Eğer otomatik olarak yok olmalarını istiyorsanız, ilerlemenizi ayarladıktan sonra .AutoClear(true) çağrısı yapın (5:42). İş biter bitmez, çubuklar anında kaybolur (6:02).

Spectre Console Live Progress Bars 2 related to Otomatik Temizleme ve Tamamlama

Bu, yalnızca bir ilerleme raporunu geçici olarak göstermeniz gerektiğinde ve konsol çıktısını karıştırmak istemediğinizde faydalıdır. İnteraktif istemler, yeni panel ekranları veya Spectre.Console'dan bir var tablosu ile birleştirildiğinde, dinamik bir kontrol paneli tarzı konsol kullanıcı arayüzü oluşturabilirsiniz.

Temel Bilgilerin Ötesinde – Farklı Stiller ve Sütunlar

Tim, kapanış dakikalarında (6:11), keşfedecek çok daha fazla şey olduğunu belirtiyor. Formatı, renkleri, düzenleri değiştirebilir ve farklı sütun tipleri kullanabilirsiniz. Örneğin, yeni bir BarChart ekleyebilir, yeni bir Tablo ekleyebilir ya da grup sonuçlarını göstermek için ilerleme çubuklarıyla birleştirilmiş yeni bir Panel ekleyebilirsiniz.

Spectre.Console dokümanları, yeni ProgressColumn uygulamaların nasıl ekleneceğini, her bir görevin maksimum değerinin nasıl ayarlanacağını veya alan tasarrufu için birden fazla görevin tek bir bara nasıl katlanacağını ("folding space") gösterir. Bunları, sayaçlar, toplam sayılar, dosya adları, kullanıcı adları veya işlenen parolaları göstermek için kullanabilirsiniz—tümü konsol uygulamanız içinde düzgün şekilde formatlanmış olarak.

Sonuç

Tim, videosunun sonunda şunları kapsadı:

  • Sıfırdan oluşturulmuş Spectre Console ilerleme çubuğu

  • Birden fazla ilerleme görevini nasıl tanımlar ve güncellersiniz?

  • Bunu Thread.Sleep ile senkron olarak veya await Task.Delay ile asenkron olarak nasıl çalıştırabilirsiniz?

  • Tamamlanan çubukları temizlemek için .AutoClear(true) nasıl kullanılır?

  • Daha gelişmiş stil ve dokümantasyon için nereye gidilir?

Bu küçük demo, profesyonel görünümlü ilerleme çubuklarını herhangi bir C# konsol programına ne kadar kolay getirebileceğinizi gösterir. Sadece Spectre.Console'un NuGet paketi ve birkaç satır kod kullanarak durumu görüntüleyebilir, yüzde gösterebilir ve kullanıcılarınıza uygulamanızın ne yaptığını daha net bir biçimde gösterebilirsiniz.

Hero Worlddot related to Hayrettin Grafikler - Spectre Console Serisi
Hero Affiliate related to Hayrettin Grafikler - Spectre Console Serisi

Sevdiğiniz Şeyleri Paylaşarak Daha Fazla Kazanın

.NET, C#, Java, Python veya Node.js ile çalışan geliştiriciler için içerik oluşturuyor musunuz? Uzmanlığınızı ek gelire dönüştürün!

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara