Altbilgi içeriğine atla
DIğER BILEşENLERLE KARşıLAşTıRıN

Infragistics Barkod vs IronBarcode: C# Barkod Kütüphanesi Karşılaştırması

Infragistics barcode okuma WPF'de çalışır. Oraya ulasmak bir BarcodeReader örneği, bir DecodeComplete olay işleyici, geri çağrıyı async koda köprüleyecek bir TaskCompletionSource<string>, bir URI'den yükleme ve desteklemek istediğiniz her SymbologyType'ün açıkça bitwise OR yapılmasını gerektirir. Bir bayrağı - diyelim ki SymbologyType.EAN8 - kaçırın ve görsellerinizdeki herhangi bir EAN-8 barcode sessizce hiçbir şey döndürmez. İstisna yok. Uyarı yok. Sadece boş bir sonuç.

Bu, WPF tarafı. WinForms tarafında, Infragistics.Win.UltraWinBarcode paketi oluşturma kontrolleri içerir ancak hiç okuyucu sınıfı içermez. WinForms projesinde barkod okumanız gerekiyorsa, Infragistics barkod paketinde çağıracak hiçbir şey yoktur. Aynı şey herhangi bir ASP.NET Core denetleyicisi, konsol aracı, Azure Fonksiyonu, Blazor Sunucu bileşeni veya Docker konteyneri için de geçerlidir. Infragistics barkod desteği, UI çerçeve sınırları içinde var: WPF oluşturma ve olay odaklı okuma alır; WinForms sadece oluşturma alır; diğer her şey hiçbir şey almaz.

Bu karşılaştırma, bu bölünmenin pratikte ne anlama geldiğini inceler ve ardından IronBarcode'un aynı işi her proje türünde aynı davranışa sahip tek statik bir API ile nasıl ele aldığını inceler.

Infragistics BarcodeDesteğini Anlama

Infragistics, en köklü .NET UI bileşen üreticilerinden biridir. Infragistics Ultimate paketi — barkod işlevselliğini kapsayan abonelik — WinForms, WPF, ASP.NET, Blazor ve mobil için yüzlerce kontrol içerir. Zaten Infragistics gridlerini, grafiklerini veya zamanlayıcılarını kullanan ekipler için barkod kontrolleri mantıklı bir eklentidir: zaten abonelik için ödeme yapıyorlar.

Barkod desteği, birleşik bir kütüphane değildir. Sadece kısmen örtüşen ayrı yeteneklere sahip iki ayrı derlemedir.

WinForms: UltraWinBarcode

Infragistics.Win.UltraWinBarcode paketi, UltraWinBarcode sınıfı aracılığıyla WinForms uygulamalarında barkod oluşturma sağlar. API basittir:

// Infragistics WinForms generation
using Infragistics.Win.UltraWinBarcode;

var barcode = new UltraWinBarcode();
barcode.Symbology = Symbology.Code128;
barcode.Data = "ITEM-12345";
barcode.SaveTo(outputPath);
// Infragistics WinForms generation
using Infragistics.Win.UltraWinBarcode;

var barcode = new UltraWinBarcode();
barcode.Symbology = Symbology.Code128;
barcode.Data = "ITEM-12345";
barcode.SaveTo(outputPath);
Imports Infragistics.Win.UltraWinBarcode

Dim barcode As New UltraWinBarcode()
barcode.Symbology = Symbology.Code128
barcode.Data = "ITEM-12345"
barcode.SaveTo(outputPath)
$vbLabelText   $csharpLabel

Bir semboloji ayarlarsınız, veri atarsınız, ardından SaveTo() çağırırsınız. WinForms içinde yalnızca oluşturma senaryoları için bu işe yarar. Symbology enumu yaygın formatları kapsar: Code128, Code39, QR, EAN13 ve diğerleri.

Bu derlemede var olmayan şey bir okuyucudur. Bir UltraBarcodeReader sınıfı yok. Bir Scan() yöntemi yok. Sadece Infragistics.Win.UltraWinBarcode paketini kullanarak bir WinForms uygulamasında bir barkod görselini okumaya çalışırsanız, çağıracak bir şey yok.

WPF: XamBarcode ve BarcodeReader

WPF tarafı hem bir oluşturma kontrolü (XamBarcode) hem de ayrı bir okuyucu sınıfı içerir (BarcodeReader, Infragistics.Controls.Barcodes içinde, Infragistics.WPF.BarcodeReader derlemesinden). Okuyucu olay odaklıdır, WPF iş parçacığı ve görüntüleme modeli etrafında tasarlanmıştır.

WPF'te bir barkod okumak, DecodeComplete olayını bağlamayı, görselleri dosya yolları yerine BitmapSource nesneleri olarak yüklemeyi ve kodunuz async ise geri çağrı modelini beklenebilir bir şeye dönüştürmeyi gerektirir.

ASP.NET Core, Konsol, Docker: Hiçbir şey

WPF veya WinForms UI derlemeleri olmadan net8.0 hedefleyen hiçbir Infragistics barkod paketi yoktur. ASP.NET Core projeleri, konsol araçları, Azure Fonksiyonları, Blazor Sunucu ve Linux Docker konteynerlerinin hiçbir Infragistics barkod seçeneği yoktur. Kütüphane, UI çerçevesine bağlıdır.

WPF Okuma Deseni

Infragistics ile WPF'de bir barkod okumanın gerçekte nasıl göründüğü burada:

// Infragistics WPF reading: event-driven, requires WPF assemblies
using Infragistics.Controls.Barcodes;
using System.Windows.Media.Imaging;

private BarcodeReader _reader;
private TaskCompletionSource<string> _result;

public InfragisticsBarcodeService()
{
    _reader = new BarcodeReader();
    _reader.DecodeComplete += OnDecodeComplete;
}

public async Task<string> ReadBarcodeAsync(string imagePath)
{
    _result = new TaskCompletionSource<string>();

    // Load as WPF BitmapSource — not a file path
    var bitmap = new BitmapImage(new Uri(imagePath, UriKind.Absolute));

    // Must specify EVERY format — no auto-detection
    _reader.SymbologyTypes = SymbologyType.Code128 |
                             SymbologyType.Code39 |
                             SymbologyType.QR |
                             SymbologyType.EAN8 |
                             SymbologyType.EAN13 |
                             SymbologyType.UPCA |
                             SymbologyType.DataMatrix |
                             SymbologyType.Interleaved2of5;

    // Trigger decode — result comes via callback
    _reader.Decode(bitmap);

    return await _result.Task;
}

private void OnDecodeComplete(object sender, ReaderDecodeArgs e)
{
    _result?.TrySetResult(e.SymbologyValue ?? "No barcode found");
}

public void Dispose()
{
    if (_reader != null)
    {
        _reader.DecodeComplete -= OnDecodeComplete;
        _reader = null;
    }
}
// Infragistics WPF reading: event-driven, requires WPF assemblies
using Infragistics.Controls.Barcodes;
using System.Windows.Media.Imaging;

private BarcodeReader _reader;
private TaskCompletionSource<string> _result;

public InfragisticsBarcodeService()
{
    _reader = new BarcodeReader();
    _reader.DecodeComplete += OnDecodeComplete;
}

public async Task<string> ReadBarcodeAsync(string imagePath)
{
    _result = new TaskCompletionSource<string>();

    // Load as WPF BitmapSource — not a file path
    var bitmap = new BitmapImage(new Uri(imagePath, UriKind.Absolute));

    // Must specify EVERY format — no auto-detection
    _reader.SymbologyTypes = SymbologyType.Code128 |
                             SymbologyType.Code39 |
                             SymbologyType.QR |
                             SymbologyType.EAN8 |
                             SymbologyType.EAN13 |
                             SymbologyType.UPCA |
                             SymbologyType.DataMatrix |
                             SymbologyType.Interleaved2of5;

    // Trigger decode — result comes via callback
    _reader.Decode(bitmap);

    return await _result.Task;
}

private void OnDecodeComplete(object sender, ReaderDecodeArgs e)
{
    _result?.TrySetResult(e.SymbologyValue ?? "No barcode found");
}

public void Dispose()
{
    if (_reader != null)
    {
        _reader.DecodeComplete -= OnDecodeComplete;
        _reader = null;
    }
}
Imports Infragistics.Controls.Barcodes
Imports System.Windows.Media.Imaging
Imports System.Threading.Tasks

Private _reader As BarcodeReader
Private _result As TaskCompletionSource(Of String)

Public Sub New()
    _reader = New BarcodeReader()
    AddHandler _reader.DecodeComplete, AddressOf OnDecodeComplete
End Sub

Public Async Function ReadBarcodeAsync(imagePath As String) As Task(Of String)
    _result = New TaskCompletionSource(Of String)()

    ' Load as WPF BitmapSource — not a file path
    Dim bitmap As New BitmapImage(New Uri(imagePath, UriKind.Absolute))

    ' Must specify EVERY format — no auto-detection
    _reader.SymbologyTypes = SymbologyType.Code128 Or
                             SymbologyType.Code39 Or
                             SymbologyType.QR Or
                             SymbologyType.EAN8 Or
                             SymbologyType.EAN13 Or
                             SymbologyType.UPCA Or
                             SymbologyType.DataMatrix Or
                             SymbologyType.Interleaved2of5

    ' Trigger decode — result comes via callback
    _reader.Decode(bitmap)

    Return Await _result.Task
End Function

Private Sub OnDecodeComplete(sender As Object, e As ReaderDecodeArgs)
    _result?.TrySetResult(If(e.SymbologyValue, "No barcode found"))
End Sub

Public Sub Dispose()
    If _reader IsNot Nothing Then
        RemoveHandler _reader.DecodeComplete, AddressOf OnDecodeComplete
        _reader = Nothing
    End If
End Sub
$vbLabelText   $csharpLabel

Bu olaylardan bir barkod okumak için yaklaşık 35 satır altyapıdır. Gerçekte ne olduğuna bakın:

  1. Bir BarcodeReader örneği oluşturulur ve bir alan olarak canlı tutulur.
  2. Bir olay işleyicisi yapıcıda bağlanır.
  3. ReadBarcodeAsync her çağrısı, paylaşılan bir alana atanan yeni bir TaskCompletionSource<string> oluşturur - bu da bu hizmetin yazıldığı şekilde dizin güvenli olmadığı anlamına gelir. Eşzamanlı çağrılar _result üst üste yazar.
  4. Görsel bir BitmapImage olarak Uri'den yüklenmelidir - bir dosya yolu dizesi, bir byte dizisi, ya da bir akış değil.
  5. Decode(), olayı async olarak tetikler. TaskCompletionSource, geri çağrılar dünyası ile async/await dünyası arasındaki yapıştırıcıdır.
  6. Geri çağrı e.SymbologyValue çıkarır.
  7. Dispose() yöntemi, bellek sızıntılarını önlemek için olay işleyiciyi ayırmalıdır.

Bu mantığın hiçbiri barkodlarla ilgili değildir. Bu, olay odaklı tasarımı aşmak için gereken altyapıdır. Üretim kodunda, ayrıca _result.Task hiçbir zaman tamamlanmadığı durumu da ele almanız gerekirdi - bir zaman aşımı, bir iptal belirteci ya da olayın hiç tetiklenmemesine karşı bir koruma.

WinForms Boşluğu

WinForms boşluğu, başlangıçta göründüğünden daha keskin. WinForms uygulamaları geliştiren ekipler genellikle her iki UI çerçevesinde de oluşturma ve okuma bekleyişiyle Infragistics barkod sayfasına geldiklerinde simetrik bir deneyim bekler. Ne buluyorlar ki Infragistics.Win.UltraWinBarcode hiç okuma yeteneği sağlamaz.

Bu bir dokümantasyon gözardı etme değil. WinForms barkod derlemesi bir oluşturma kontrolü olarak tasarlanmıştır. Bir WinForms uygulamasında barkod taramanız gerekiyorsa — diyelim ki, bir kullanıcının yüklediği bir görüntü dosyasından bir barkodu okuma veya bir kamera akşından bir barkodu çözme — Infragistics barkod araçlarıyla bunu yapamazsınız. Tamamen ayrı bir kütüphane getirmeniz gerekecek, bu noktada oluşturma için Infragistics kullanma gerekçesi zayıflar.

Asimetri, karma-çerçeve projeleri yürüten takımlar için gerçekten rahat olmayan bir durum yaratır. Hem bir WPF masaüstü istemcisi hem de bir WinForms masaüstü istemcisi olan bir takım, farklı yerlerde de olsa Infragistics kullanmalarına rağmen, WinForms projesinde barkod okuma için Infragistics kullanamaz.

Sembol Spesifikasyonu: Sessiz Bir Başarısızlık Modu

WPF okuyucusundaki SymbologyTypes bayrak özelliği, çöküş modu ince ve üretimde tehlikeli olduğundan, kendi bölümünü hak eder.

Okuyucuyu yapılandırdığınızda, desteklemek istediğiniz her barkod formatını açıkça OR ile birleştirmeniz gerekiyor:

// Must enumerate every format — miss one, that format silently returns empty
_reader.SymbologyTypes = SymbologyType.Code128 |
                         SymbologyType.Code39 |
                         SymbologyType.QR |
                         SymbologyType.EAN8 |
                         SymbologyType.EAN13 |
                         SymbologyType.UPCA |
                         SymbologyType.DataMatrix |
                         SymbologyType.Interleaved2of5;
// Must enumerate every format — miss one, that format silently returns empty
_reader.SymbologyTypes = SymbologyType.Code128 |
                         SymbologyType.Code39 |
                         SymbologyType.QR |
                         SymbologyType.EAN8 |
                         SymbologyType.EAN13 |
                         SymbologyType.UPCA |
                         SymbologyType.DataMatrix |
                         SymbologyType.Interleaved2of5;
' Must enumerate every format — miss one, that format silently returns empty
_reader.SymbologyTypes = SymbologyType.Code128 Or
                         SymbologyType.Code39 Or
                         SymbologyType.QR Or
                         SymbologyType.EAN8 Or
                         SymbologyType.EAN13 Or
                         SymbologyType.UPCA Or
                         SymbologyType.DataMatrix Or
                         SymbologyType.Interleaved2of5
$vbLabelText   $csharpLabel

Bir barkod görseli bir EAN-8 barkodu içeriyorsa ve SymbologyType.EAN8 bayraklarda yoksa, e.SymbologyValue null veya boş geri döner. Kod cozumleme olayı hala tetiklenir. Hiçbir istisna atılmaz. Çağırıcı 'Barkod bulunamadı' alır ve görüntünün okunamaz olup olmadığı veya sadece yapılandırılmadığına dair bir gösterge yoktur.

Pratikte bu şu anlama gelir:

  • Başlangıç ayarları, geliştiricinin test ettiği formatlar için gayet iyi çalışır.
  • Sisteme yeni bir barkod formatı girer (bir tedarikçi etiket türünü değiştirir, yeni bir ürün hattı farklı bir semboloji kullanır).
  • Bu formata sahip tüm görüntüler için okuyucu sessizce başarısız olur.
  • Başarısızlık, 'görüntünün barkodu yok' şeklinde görünür, 'format yapılandırılmamış' şeklinde değil.

Bunu hata ayıklayan ekipler, görüntü kalitesini inceleyerek zaman harcarlar, formatın bayrak listesinde hiç olmadığını fark etmeden önce.

IronBarcode'un SymbologyTypes özelliği yok. Her okuma sırasında 50'den fazla desteklenen formatın otomatik algılanmasını sağlar. Unutulacak bir bayrak yok.

Platform Matrisi

Platformlar arasındaki yetenek boşluğu, mimari kısıtlamayı anlamanın en iyi yoludur:

Platform Infragistics Oluşturma Infragistics Okuma IronBarcodeOluşturma IronBarcodeOkuma
WPF XamBarcode kontrolü BarcodeReader (olay odaklı) Evet Evet
WinForms UltraWinBarcode MEVCUT DEĞİL Evet Evet
ASP.NET Core MEVCUT DEĞİL MEVCUT DEĞİL Evet Evet
Konsol MEVCUT DEĞİL MEVCUT DEĞİL Evet Evet
Blazor Sunucu MEVCUT DEĞİL MEVCUT DEĞİL Evet Evet
Docker / Linux MEVCUT DEĞİL MEVCUT DEĞİL Evet Evet
Azure İşlevleri MEVCUT DEĞİL MEVCUT DEĞİL Evet Evet

Bu tablo, saf bir WPF masaüstü uygulamasının ötesinde herhangi bir şey yürüten takımların neden Infragistics barkod desteğinin yetersiz olduğunu anlamalarına yardımcı olur. Bir projenin WinForms ve ASP.NET Core — veya WPF ve bir arka plan işçi servisi kapsamını genişletmesi anında, Infragistics barkod kütüphanesi sadece kod tabanının bir kısmını kapsar.

IronBarcode'u Anlamak

IronBarcode, WinForms, WPF veya herhangi bir UI framework'una bağımlılığı olmayan .NET için özel bir barkod kütüphanesidir. Aynı NuGet paketi, aynı namespace ve aynı API, herhangi bir .NET projesinde çalışır: WinForms, WPF, ASP.NET Core, konsol, Blazor Server, Docker, Azure Functions, AWS Lambda.

// IronBarcode: identical code in WinForms, WPF, ASP.NET Core, console, Docker
// NuGet: dotnet add package IronBarcode
using IronBarCode;

// Read — 2 lines, any platform
var results = BarcodeReader.Read(imagePath);
return results.FirstOrDefault()?.Value ?? "No barcode found";
// IronBarcode: identical code in WinForms, WPF, ASP.NET Core, console, Docker
// NuGet: dotnet add package IronBarcode
using IronBarCode;

// Read — 2 lines, any platform
var results = BarcodeReader.Read(imagePath);
return results.FirstOrDefault()?.Value ?? "No barcode found";
Imports IronBarCode

' Read — 2 lines, any platform
Dim results = BarcodeReader.Read(imagePath)
Return If(results.FirstOrDefault()?.Value, "No barcode found")
$vbLabelText   $csharpLabel

BarcodeReader.Read() bir statik metottur. Yönetilecek bir örnek yok, bağlanacak bir olay yok, geri çağrı modelini köprüleyecek bir TaskCompletionSource yok. Bir dosya yolu dizesi, bir byte dizisi, Stream veya yığın işleme için bunların herhangi bir dizisini kabul eder.

Oluşturma için, BarcodeWriter.CreateBarcode() PNG, JPEG, SVG olarak kaydedebileceğiniz veya ikili veri olarak alabileceğiniz bir barkod nesnesi döndürür:

using IronBarCode;

// Generate Code 128
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
             .ResizeTo(400, 100)
             .SaveAsPng("barcode.png");

// Generate QR code
QRCodeWriter.CreateQrCode("https://example.com", 500,
    QRCodeWriter.QrErrorCorrectionLevel.Highest)
    .SaveAsPng("qr.png");
using IronBarCode;

// Generate Code 128
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
             .ResizeTo(400, 100)
             .SaveAsPng("barcode.png");

// Generate QR code
QRCodeWriter.CreateQrCode("https://example.com", 500,
    QRCodeWriter.QrErrorCorrectionLevel.Highest)
    .SaveAsPng("qr.png");
Imports IronBarCode

' Generate Code 128
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128) _
             .ResizeTo(400, 100) _
             .SaveAsPng("barcode.png")

' Generate QR code
QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest) _
    .SaveAsPng("qr.png")
$vbLabelText   $csharpLabel

Lisans başlatma, yalnızca bir kez, uygulama başlangıcında yapılır:

IronBarCode.License.LicenseKey = "YOUR-KEY";
IronBarCode.License.LicenseKey = "YOUR-KEY";
Imports IronBarCode

IronBarCode.License.LicenseKey = "YOUR-KEY"
$vbLabelText   $csharpLabel

Yan Yana: Toplu İşleme

Toplu işlem, Infragistics WPF okuyucusunda başka bir yapısal sınırlamayı ortaya çıkarır. Çünkü okuyucu ortak bir olay işleyici kullanıyor ve _result alanı her çağrıda üzerine yazılıyor, yukarıda gösterilen hizmet sınıfı birden fazla görseli aynı anda güvenli bir şekilde işleyemez. Çağrıları sıralamak zorundasınız:

// Infragistics: must process sequentially — shared event handler and TaskCompletionSource
// are not thread-safe; concurrent calls would corrupt _result
var service = new InfragisticsBarcodeService();
var results = new List<string>();

foreach (var file in imageFiles)
{
    // Each call must await before starting the next
    var value = await service.ReadBarcodeAsync(file);
    results.Add(value);
}
// Infragistics: must process sequentially — shared event handler and TaskCompletionSource
// are not thread-safe; concurrent calls would corrupt _result
var service = new InfragisticsBarcodeService();
var results = new List<string>();

foreach (var file in imageFiles)
{
    // Each call must await before starting the next
    var value = await service.ReadBarcodeAsync(file);
    results.Add(value);
}
Imports System.Collections.Generic

' Infragistics: must process sequentially — shared event handler and TaskCompletionSource
' are not thread-safe; concurrent calls would corrupt _result
Dim service As New InfragisticsBarcodeService()
Dim results As New List(Of String)()

For Each file In imageFiles
    ' Each call must await before starting the next
    Dim value As String = Await service.ReadBarcodeAsync(file)
    results.Add(value)
Next
$vbLabelText   $csharpLabel

Bu durumu eşzamanlı hale getirmek, önemli ek altyapı gerektirir: bir kilit, bir kuyruk veya önceki bir çözümleme henüz devam ederken _result üzerine yazılmamasını sağlamak için bir semafor. Bu, basit bir G/Ç işlemi olması gereken şey için önemsiz olmayan bir eşzamanlılık sorunudur.

IronBarcode'un statik BarcodeReader.Read() dizin güvenlidir. Herhangi bir ek senkronizasyon olmadan aynı anda birden fazla iş parçacığından çağrılabilir. Yığın iş yükleri için, Parallel.ForEach doğrudan kullanabilirsiniz:

using IronBarCode;

// IronBarcode: parallel batch with thread-safe static API
var results = new System.Collections.Concurrent.ConcurrentBag<string>();

Parallel.ForEach(imageFiles, file =>
{
    var barcodeResults = BarcodeReader.Read(file);
    foreach (var result in barcodeResults)
    {
        results.Add(result.Value);
    }
});
using IronBarCode;

// IronBarcode: parallel batch with thread-safe static API
var results = new System.Collections.Concurrent.ConcurrentBag<string>();

Parallel.ForEach(imageFiles, file =>
{
    var barcodeResults = BarcodeReader.Read(file);
    foreach (var result in barcodeResults)
    {
        results.Add(result.Value);
    }
});
Imports IronBarCode
Imports System.Collections.Concurrent
Imports System.Threading.Tasks

' IronBarcode: parallel batch with thread-safe static API
Dim results As New ConcurrentBag(Of String)()

Parallel.ForEach(imageFiles, Sub(file)
    Dim barcodeResults = BarcodeReader.Read(file)
    For Each result In barcodeResults
        results.Add(result.Value)
    Next
End Sub)
$vbLabelText   $csharpLabel

Ayrıca bir çağrıda birden fazla dosya geçirebilir ve BarcodeReaderOptions ile paralelliği yapılandırabilirsiniz:

using IronBarCode;

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    MaxParallelThreads = 4
};

var results = BarcodeReader.Read(imageFiles, options);
foreach (var result in results)
{
    Console.WriteLine($"{result.Value} ({result.Format})");
}
using IronBarCode;

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    MaxParallelThreads = 4
};

var results = BarcodeReader.Read(imageFiles, options);
foreach (var result in results)
{
    Console.WriteLine($"{result.Value} ({result.Format})");
}
Imports IronBarCode

Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True,
    .MaxParallelThreads = 4
}

Dim results = BarcodeReader.Read(imageFiles, options)
For Each result In results
    Console.WriteLine($"{result.Value} ({result.Format})")
Next
$vbLabelText   $csharpLabel

Özellik Karşılaştırması

Özellik Infragistics Barcode IronBarcode
WinForms barkod okuma Mevcut değil Evet
WPF barkod okuma Evet (olay güdümlü) Evet (senkron)
ASP.NET Core desteği Mevcut değil Evet
Konsol / İşçi Servisi Mevcut değil Evet
Docker / Linux Mevcut değil Evet
Azure İşlevleri Mevcut değil Evet
Blazor Sunucu Mevcut değil Evet
Otomatik format algılama Hayır — her SymbologyType bayrağını belirtmelisiniz Evet — 50+ formatın tamamı otomatik algılanır
PDF barkod okuma Mevcut değil Evet — yerel, ek paket yok
İşlemci güvenli okuma Hayır (paylaşılan etkinlik işleyicisi) Evet (statik API)
Olay güdümlü API gereklidir Evet (WPF) Hayır
Açık görüntü yüklemesi (BitmapSource) Evet Hayır — dosya yolu, bayt, akış kabul eder
Senkron okuma Hayır (TaskCompletionSource üzerinden köprü kurmanız gerekiyor) Evet
Toplu işleme Yalnızca ardışık (eşzamanlılık güvensiz) Yerleşik paralel işlem
Sessiz format hataları Evet (eksik SymbologyType bayrağı) Hayır
Suite bağımlılığı gereklidir Evet — Infragistics Ultimate aboneliği Hayır — bağımsız paket
Süresiz lisans seçeneği Hayır — yıllık abonelik Evet
Yaklaşık lisans maliyeti $1,675+/yıl (Infragistics Ultimate) 749$'dan başlayan süresiz (Lite)

API Eslestirme Referansi

WinForms (UltraWinBarcode) to IronBarcode

Infragistics WinForms — UltraWinBarcode IronBarcode
new UltraWinBarcode() BarcodeWriter.CreateBarcode(data, encoding)
barcode.Symbology = Symbology.Code128 BarcodeEncoding.Code128 (CreateBarcode için parametre)
barcode.Data = "ITEM-12345" CreateBarcode() ilk argümanı
barcode.SaveTo(outputPath) .SaveAsPng(outputPath)
Okuma API'si mevcut değil BarcodeReader.Read(imagePath)

WPF (BarcodeReader) to IronBarcode

Infragistics WPF — BarcodeReader IronBarcode
new BarcodeReader() Statik sınıf — örnek gerekmez
_reader.DecodeComplete += OnDecodeComplete Gerekli değil
_reader.SymbologyTypes = SymbologyType.X \|SymbologyType.Y \| ... Otomatik algılama — yapılandırma yok
new BitmapImage(new Uri(path)) + _reader.Decode(bitmap) BarcodeReader.Read(path)
e.SymbologyValue (geri çağrıda) result.Value
e.Symbology (geri çağrıda) result.Format
TaskCompletionSource<string> async sarmalayıcı Senkron — sarmalayıcı gerekli değil
Dispose() — olay işleyiciyi ayır Gerekli değil — örnek veya olay yok
Yalnızca WPF projesi Herhangi bir .NET proje türü

Takımlar Ne Zaman Geçiş Yapar

Birkaç belirli durum, sürekli olarak ekipleri Infragistics barkod desteğinden uzaklaştırır.

WinForms'da okuma gerekiyor. Bu en yaygın senaryodur. Bir WinForms uygulaması UltraWinBarcode ile barkodları gayet iyi oluşturur ama ardından yeni bir gereksinim gelir: yüklenen bir görselden bir barkodu taramak veya yazdırmadan önce bir etiketi doğrulamak. WinForms için Infragistics okuma API'si yoktur. Ekip, ya ikinci bir kütüphane ekler ya da oluşturma kodunu her iki işlemi de gerçekleştiren bir şeyle değiştirir.

Yeni ASP.NET Core endpoint. Infragistics barkod oluşturma ile bir masaüstü uygulaması, bir eşlikçi web API alır. Endpoint'in görüntü yüklemelerini kabul etmesi ve barkod değerlerini döndürmesi veya talep üzerine barkod görüntüleri oluşturması gerekir. Hiçbiri, bir ASP.NET Core projesinde Infragistics barkod paketleri ile mümkün değildir. IronBarcode, dotnet add package IronBarcode ile yüklenir ve bir denetleyici eyleminde bir konsol metodunda çalıştığı aynı şekilde çalışır.

Docker dağıtımı. Bir WPF uygulaması kapsülleniyor veya barkod mantığı bir mikroservise ayrıştırılıyor. WPF derlemeleri, Linux Docker konteynerlerinde çalışmaz. Infragistics WPF BarcodeReader onlarla birlikte gelir. IronBarcode, yerel olarak Linux x64'ü hedef alır.

Toplu işleme performansı. Bir iş akışı yüzlerce veya binlerce barkod görüntüsü işler. Olay güdümlü Infragistics okuyucusu onları ardışık olarak işler. IronBarcode'un statik okuyucusu dizi güvenlidir ve hiçbir eşzamanlılık altyapısı olmadan Parallel.ForEach veya yerleşik MaxParallelThreads seçeneğini destekler.

Üretimde düz bir şekilde format hatalarları. Bir ekip, belirli bir formatın barkodlarının haftalardır düz bir şekilde çalışmadığını fark eder çünkü SymbologyTypes bayrakları o formatı içermiyordu. Otomatik algılamaya geçmek, hata modunu tamamen ortadan kaldırır.

Infragistics abonelik kapsamını azaltma. Bazı ekipler, barkod kontrollerinin bunun bir parçası olduğu için spesifik olarak Infragistics Ultimate abonelik fiyatını ödemektedirler. Barkod gerekliliği abonelik için tek neden olduğunda, maliyetin bir kısmında özel bir barkod kütüphanesi değerlendirmeye değerdir.

Sonuç

Infragistics barkod desteği ile ilgili temel sorun, mimari bir sorundur, yetenekle ilgili değildir. WPF BarcodeReader barkodları okur. WinForms UltraWinBarcode onları üretir. Her bileşenin tasarlandığı dar bağlamda çalışırlar. Sorun şu ki, bu iki bağlam, çoğu .NET ekibinin gerçekten ihtiyaç duyduğu şeyleri kapsamıyor.

Modern bir .NET uygulamasındaki bir barkod özelliği, nadiren tek bir UI framework'ünde yaşar. WinForms istemcisi ve bir web API'de bulunur. Bir Docker konteynerinde ve bir masaüstünde çalışır. ASP.NET endpoint'ine yüklenen görüntüleri taraması ve konsol aracından etiketler yazdırması gerekir. Bunların hiçbiri, Infragistics barkod paketleri ile çalışmaz ve WPF okuyucusunun olay güdümlü modeli, çalıştığı tek bağlamda bile önemli ölçüde karmaşıklık katar.

IronBarcode, aynı sorunu — barkodları okuma ve oluşturma — her .NET proje türünde aynen derlenen ve çalışan bir statik API ile çözer. WPF hizmet sınıfında yazdığınız BarcodeReader.Read() çağrısı, bir ASP.NET Core denetleyicisinde ve bir Linux Docker konteynerinde yazdığınız aynı çağrıdır. Hiçbir olay, hiçbir bayrak, TaskCompletionSource yok. Barkod mantığı 35 yerine iki satırdır ve bu iki satır her yerde çalışır.

Sıkça Sorulan Sorular

Infragistics Barcode nedir?

Infragistics Barcode, C# uygulamalarinda barkod oluşturmak ve okuma için .NET bir barkod kütüphanesidir. .NET projeleri için bir barkod çözümu secen geliştiricilerin degerlendirdigi birkac alternatiftir.

Infragistics Barcode ve IronBarcode arasindaki temel farklar nelerdir?

IronBarcode, statik, durumsuz bir API kullanir ve örnek yönetimi gerektirmezken, Infragistics Barcode tipik olarak kullanımdan önce örnek oluşturma ve konfigure etme gerektirir. IronBarcode ayrica tüm ortamlarda yerel PDF desteği, otomatik format tanima ve tek anahtarla lisanslama sunar.

IronBarcode, Infragistics Barcode'den daha kolay mi lisanslaniyor?

IronBarcode, hem geliştirme hem de üretim dağıtımlarını kapsayan tek bir lisans anahtarı kullanır. Bu durum, CI/CD hatları ve Docker yapılandırmalarını, SDK anahtarlarını çalıştırma anahtarlarından ayıran lisanslama sistemleriyle karşılaştırıldığında basitleştirir.

IronBarcode, Infragistics Barcode'un desteği olan tüm barkod formatlarini destekliyor mu?

IronBarcode, QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztec, EAN-13, UPC-A, GS1 ve daha fazlası dahil 30'dan fazla barkod sembolojisini destekler. Format otomatik algılama, açık format sayımı gerektirmez.

IronBarcode yerel PDF barkod okuma desteği veriyor mu?

Evet. IronBarcode, BarcodeReader.Read('document.pdf') kullanarak PDF dosyalarından barkodları doğrudan okur, ayrı bir PDF işleme kütüphanesi gerektirmez. Sayfa başına sonuçlar, sayfa numarası, barkod formatı, değeri ve güven skoru içerir.

IronBarcode, Infragistics Barcode'a kiyasla toplu işleme nasil yaklasir?

IronBarcode'un statik yöntemleri durumsuz ve doğal olarak iş parçacığı güvenlidir, Parallel.ForEach'in doğrudan kullanımını sağlar ve iş parçacığı başı örnek yönetimi gerektirmez. Hiçbir fiyatlandırma seviyesi için bant genişliği sınırı yoktur.

IronBarcode hangi .NET sürümlerini destekliyor?

IronBarcode, .NET Framework 4.6.2+, .NET Core 3.1 ve .NET 5, 6, 7, 8 ve 9'u tek bir NuGet paketi içinde destekler. Platform hedefleri arasında Windows x64/x86, Linux x64 ve macOS x64/ARM bulunuyor.

.NET projesine IronBarcode'u nasıl kurarım?

NuGet aracılığıyla IronBarcode'u kurun: 'Install-Package IronBarCode' komutunu Paket Yöneticisi Konsolunda veya CLI'de 'dotnet add package IronBarCode' komutunu çalıştırın. Ek bir SDK yükleyici veya çalışma zamanı dosyaları gerekli değildir.

Infragistics'ten farkli olarak IronBarcode'u satın almadan önce degerlendirebilir miyim?

Evet. IronBarcode'ın deneme modu, yalnızca oluşturulan çıktı görüntülerine bir filigran ekleyerek tam çözümlenmiş barkod değerlerini verir. Satın almadan önce kendi belgelerinizde okuma doğruluğunu test edebilirsiniz.

Infragistics Barcode ve IronBarcode arasindaki fiyat farki nedir?

IronBarcode, geliştirme ve üretimi kapsayan tek bir geliştirici lisansı için $749'dan başlar. Fiyatlandırma detayları ve hacim seçenekleri, IronBarcode lisanslama sayfasında mevcuttur. Ayrı bir çalışma zamanı lisansı gereksinimi yoktur.

Infragistics Barcode'dan IronBarcode'a geçiş yapmak kolay mi?

Infragistics Barcode'dan IronBarcode'a geçiş yaptiginizda, temel olarak örnek tabanli API cagri'larini IronBarcode'un statik metodlari ile değiştirmek, lisanslamakla ilgili gereklilikleri kaldirir ve sonuc özellik adlarini guncellersiniz. Cogu geçiş, kod eklemekten ziyade azaltilmasi için yapılır.

IronBarcode, logolu QR kodları üretiyor mu?

Evet. QRCodeWriter.CreateQrCode().AddBrandLogo('logo.png') kullanarak bir QR koduna yerel logolu bir marka resmi ekleyin, yapılandırılabilir hata düzeltme ile. ChangeBarCodeColor() üzerinden renkli QR kodları da desteklenir.

Jordi Bardia
Yazılım Mühendisi
Jordi Python, C# ve C++ konularında en yetkin, Iron Software'deki yeteneklerini kullanmadığı zamanlarda; oyun programlıyor. Ürün testi, ürün geliştirme ve araştırma sorumluluklarını paylaşan Jordi, sürekli ürün gelişimine büyük değer katıyor. Çeşitli deneyimleri onu ...
Daha Fazlasını Oku

Iron Destek Ekibi

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