.NET 11.0 Önizleme 4: Renkli bir API uzantıları buketi

kapanış bildirimi

Bu makale İngilizce olarak da mevcuttur. Teknik yardımla tercüme edildi ve yayınlanmadan önce editoryal olarak gözden geçirildi.

Yaklaşan .NET sürüm 11.0'ın dördüncü ön izleme sürümü yayımlandı ve indirilmeye hazır. Aynı zamanda Microsoft, .NET 11.0 uygulamaları geliştirmek için gerekli olan Visual Studio 2026 Insiders'ın 11811.120 sürümünü de yayımladı. Alternatif olarak, Visual Studio Code ve SDK'da bulunan komut satırı derleyicisiyle çalışabilirsiniz.

Duyurudan sonra devamını okuyun

Dr. Holger Schwichtenberg, .NET 10.0, C# 14.0, Blazor 10.0 ve Entity Framework Core 10.0 üzerine uzman kitapları yayınladı. www.IT-Visions.de'de danışman ve eğitmen olarak çalışmaktadır.

.NET 11.0 SDK'yı Önizleme 4'te yükleme

.NET 11.0 SDK'yı Önizleme 4'te yükleme

.NET 11.0 SDK'yı Önizleme 4'te yükleme

BetterCode() .NET 11.0

Bu, .NET 11.0'daki bir yeniliktir: Dr. Holger Schwichtenberg ve diğer uzmanlar, 17 Kasım 2026'da BetterCode() .NET 11.0 çevrimiçi konferansında .NET SDK, C# 15.0 ve daha fazlasındaki geliştiriciler için değişiklikleri sunacaklar. Program yayına girene kadar indirimli kör kuş biletleri mevcuttur.

sınıf System.Diagnostics.Process işletim sistemi işlemlerini yönetmek için kullanılan klasik .NET Framework 1.0 sürümü 2002'den beri mevcuttur. O zamandan beri, işlemler sınıfın yeni bir örneğinin oluşturulmasıyla başlatılır. Statik yöntem, .NET Framework 2.0'dan (2005 yılı) başlayarak alternatif olarak mevcuttur. Process.Start(). 21 yıl sonra Microsoft, süreci başlatmak için artık daha fazla alternatif statik yöntem ekliyor: Process.Run() VE Process.RunAsync() birlikte Process.RunAndCaptureText() VE Process.RunAndCaptureTextAsync(). Bu son çift şunları sunar: ProcessTextOutput-Standart çıktıyı doğrudan görüntülemenizi sağlayan nesne (ProcessTextOutput), standart hata çıktısı (StandardError) ve değeri döndürün (ExitStatus.ExitCode) eskisinden önemli ölçüde daha az program koduyla erişilebilir Start()yöntem gereklidir, listeye bakın.

Alt süreç, bir iptal belirteci kullanılarak iptal edilebilir. Bundan farklı olarak Start()yönteminde, adında “Run” bulunan yeni yöntemler, alt süreç sona erene kadar çağırana döndürülmeyecektir. Ancak geliştiriciler, süreç çalışırken herhangi bir çıktıyı işleyemezler.


CancellationTokenSource cts = new CancellationTokenSource();
 
 ProcessTextOutput result = await Process.RunAndCaptureTextAsync(
     "robocopy.exe", [@"t:Daten", @"t:Daten_Backup", "/MIR", "/IS"], cts.Token);
 
 CUI.Print("Neuer Prozess mit ID #" + result.ProcessId + " ist beendet!");
 
 CUI.Line("StandardOutput");
 CUI.Print(result.StandardOutput);
 CUI.Line("StandardError");
 CUI.PrintError(result.StandardError);
 CUI.Line("ExitStatus");
 CUI.Print("Canceled? " + result.ExitStatus.Canceled);
 if (result.ExitStatus.HasValue && !result.ExitStatus.IsEmpty) PrintStatus(result.ExitStatus.ExitCode);

Liste 1: Yeni Process.RunAndCaptureTextAsync() Yöntemini Kullanma

Duyurudan sonra devamını okuyun

Süreci başlatmak için eklenen bir diğer yöntem ise Process.StartAndForget() Başarılı bir başlatmayı beklemeden ve yeni süreçle doğrudan etkileşim seçenekleri olmadan bir süreci başlatın. Yeni işlemi yalnızca döndürülen işlem kimliğini kullanarak harici olarak izleyebilirsiniz, ancak işlemin dönüş değerine erişiminiz yoktur.


int processId = Process.StartAndForget(
    "robocopy.exe", [@"t:Daten", @"t:Daten_Backup", "/MIR", "/IS"]);
 
CUI.Print("Neuer Prozess mit ID #" + processId + " ist gestartet!");
 
var p = Process.GetProcessById(processId);
while(!p.HasExited)
{
 CUI.BusyIndicator();
 Thread.Sleep(500);
}
 
CUI.Line("Neuer Prozess mit ID #" + processId + " ist beendet!");
// PrintStatus(p.ExitCode); // System.InvalidOperationException: 'Process was not started by this object, so requested information cannot be determined.'

Liste 2: Yeni Process.StartAndForget() Yöntemini Kullanma

sınıfta ProcessStartInfokime Process.Start() kullanıldığında ayrıca iki yeni boole seçeneği vardır: Bir tarafta yeni boolean seçenekleri vardır. ProcessStartInfo.StartDetached başlatma işlemi sonlandırılsa bile yaşamaya devam eden kendi konsoluyla bağımsız bir işlem başlatır. İle ProcessStartInfo.KillOnParentExit Öte yandan, ilk süreç sona erdiğinde alt sürecin de sonlandırılması mümkündür. Her iki seçeneği bir arada kullanırsanız ayrı bir konsol elde edersiniz, ancak önyükleme işlemi tamamlandığında konsol da sona erer. Sırasında ProcessStartInfo.StartDetached tüm platformlarda çalışır ProcessStartInfo.KillOnParentExit şu anda yalnızca Windows'ta çalışıyor çünkü Microsoft'un kaynak kodu şunu söylüyor:


[SupportedOSPlatform("windows")]
public bool KillOnParentExit { get; set; }

Bir blog yazısında Android ve Linux için uygulamaların üzerinde çalışıldığı zaten belirtiliyor.

için ile Process.Start() başlatılan süreçler de yeni yöntemler var ReadAllText() VE ReadAllTextAsync()sonlandırılan bir süreçten aynı anda standart çıktı ve hata çıktısı almak için kullanılabilir:


process.WaitForExit();
(string output, string error) = process.ReadAllText();

Önceki yaklaşımın aksine


string output = process.StandardOutput.ReadToEnd();
string error = process.StandardError.ReadToEnd();

Yeni yöntemlerle çıkmaza girme riski yok.

.NET 11.0 Preview 1'de Microsoft, Zstandard sıkıştırmayı ekledi. Sınıflar ZstandardEncoder VE ZstandardDecoder .NET Core 2.1'de halihazırda tanıtılan sınıfların aynısını sunar BrotliEncoder VE BrotliDecoder türlerle sıkıştırma ve sıkıştırmayı açma yeteneği Span<byte> VE ReadOnlySpan<byte> akışların karmaşık bellek tahsisi olmadan çalışmak. Microsoft artık bu seçeneği eski sınıflar için de sunuyor ZLibEncoder, DeflateEncoder VE GZipEncoder ve ilgili kod çözücüler için listeye bakın.


CUI.H1($"Komprimiere Datei {BIGFILEPATH} via Span<T>");
 
ReadOnlySpan<byte> sourceSpan = File.ReadAllBytes(BIGFILEPATH);
Console.WriteLine("Länge=" + sourceSpan.Length);
long maxCompressedLength = ZLibEncoder.GetMaxCompressedLength(sourceSpan.Length);
Span<byte> compressedSpan = new byte[maxCompressedLength];
 
// ZLibEncoder, DeflateEncoder, GZipEncoder, ZstandardEncoder oder BrotliEncoder
using ZLibEncoder encoder = new();
OperationStatus status = encoder.Compress(
    sourceSpan, compressedSpan, out int bytesConsumed, out int bytesWritten,
    isFinalBlock: true);
 
PrintStatus(compressedSpan, status);
 
CUI.H1($"Dekomprimieren aus Span<T>");
 
// ZLibDecoder, DeflateDecoder, GZipDecoder, ZstandardDecoder oder BrotliDecoder
using ZLibDecoder decoder = new();
byte[] decompressedSpan = new byte[sourceSpan.Length];
OperationStatus decompressStatus = decoder.Decompress(
  compressedSpan,
  decompressedSpan,
  out int compressedBytesConsumed,
  out int decompressedBytesWritten);
 
PrintStatus(decompressedSpan, decompressStatus);

Liste 3: Açıklıklı Sıkıştırma ve Sıkıştırmayı Açma

Kayan noktalı sayı türü sınıfları Half, Single VE Double yöntemlerde olabilir Parse() VE TryParse() ayrıca onaltılık sayılarla karakter dizilerini de değerlendirir. Bunu yapmak için geliştiricilerin bu yeteneğe sahip olması gerekir. NumberStyles.HexFloat belirtmek:


static void TestDouble(double d, string doubleAsString )
{
 string hex = d.ToString("X");
 Console.WriteLine(hex); 
 double d1a = double.Parse(hex, NumberStyles.HexFloat);
 Console.WriteLine(d1a); 
 CUI.Success(d1a == d); // True
 double.TryParse(hex, NumberStyles.HexFloat, null, out double d1b);
 Console.WriteLine(d1b); 
 CUI.Success(d1b == d); // True
}

Sınıflar System.Text.Unicode.Utf8 VE System.Text.Unicode.Utf16 şimdi iki yeni yöntem sunuyoruz: IsValid() VE IndexOfInvalidSubsequence(). Bu, Unicode karakter dizisinin geçerliliğini kontrol etmeyi ve en azından ilk yanlış konumu belirlemeyi kolaylaştırır:


ReadOnlySpan<char> chars1 = "Gültiger Text: uD83DuDC4D";
Console.WriteLine(chars1);
bool check1 = Utf16.IsValid(chars1); // True
Console.WriteLine(check1);
if (check1) CUI.Success("OK");
else CUI.Warning("Fehler bei Zeichen: " + Utf16.IndexOfInvalidSubsequence(chars1));
 
ReadOnlySpan<char> chars2 = "Ungültiger Text: uD83D";
Console.WriteLine(chars2);
bool check2 = Utf16.IsValid(chars2); // False
if (check2) CUI.Success("OK");
else CUI.Warning("Fehler bei Zeichen: " + Utf16.IndexOfInvalidSubsequence(chars2));

Modern .NET'te bulunan JSON serileştiricisi olan ve aynı zamanda klasik .NET Framework'te de çalışan System.Text.Json NuGet paketi, önceden var olan yöntemi sunar Reset() sınıfta Utf8JsonWriter şimdi kullanabileceğiniz bir aşırı yük JsonWriterOptions farklı ayarlar belirleyebilirsiniz. Geliştiriciler bunu kullanabilir Utf8JsonWriter-Örnekleri farklı ayarlarla yeniden kullanın:


using var stream1 = new MemoryStream();
using var writer = new Utf8JsonWriter(stream1, new JsonWriterOptions
  {
    Indented = true
  });
…
using var stream2 = new MemoryStream();
writer.Reset(stream2, new JsonWriterOptions
   {
    Indented = false
   });

Microsoft, System.Text.Json içindeki kaynak oluşturucudaki bazı zayıflıkları düzeltiyor.


Yayımlandı

kategorisi

yazarı:

Etiketler:

Yorumlar

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir