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)
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
Bu olaylardan bir barkod okumak için yaklaşık 35 satır altyapıdır. Gerçekte ne olduğuna bakın:
- Bir
BarcodeReaderörneği oluşturulur ve bir alan olarak canlı tutulur. - Bir olay işleyicisi yapıcıda bağlanır.
ReadBarcodeAsyncher çağrısı, paylaşılan bir alana atanan yeni birTaskCompletionSource<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.- Görsel bir
BitmapImageolarakUri'den yüklenmelidir - bir dosya yolu dizesi, bir byte dizisi, ya da bir akış değil. 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.- Geri çağrı
e.SymbologyValueçıkarır. 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
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")
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")
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"
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
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)
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
Ö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.

