Infragistics Barkod vs IronBarcode: C# Barkod Kütüphanesi Karşılaştırması
Infragistics Barkod ve IronBarcode: YalnızcaWPFOkuyucu ve Platform-Agnostik API
Infragistics barkod okuma, WPF'de çalışır. Oraya ulaşmak için bir BarcodeReader örneği, bir DecodeComplete olay işleyicisi, geri çağrıyı asenkron koda köprülemek için bir TaskCompletionSource<string>, bir URI'den yükleme için bir BitmapImage ve desteklemek istediğiniz her Symbology ailesinin bit düzeyinde bir OR'si gerekir — Decode()'a ikinci argüman olarak geçilir. Bir aileyi dışarıda bırakın — örneğin, bayraklardan Symbology.QRCode çıkarın — ve görüntülerinizdeki herhangi bir QR barkodu sessizce hiç bir şey döndürmez. Hiçbir istisna yok. Hiçbir uyarı yok. Sadece boş bir sonuç.
Bu,WPFtarafıdır.WinFormstarafında, Infragistics.Win.UltraWinBarcode paketi oluşturma kontrolleri içerir ancak hiç okuma sınıfı yoktur.WinFormsprojenizde barkodları okumanız gerekiyorsa, Infragistics barkod paketinde çağrılacak bir şey yoktur. Aynı durum herhangi birASP.NET Coredenetleyicisi, 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ında mevcuttur:WPFüretim ve olay yollu okuma alır;WinFormssadece üretim alır; geri kalan hiçbir şey almaz.
Bu karşılaştırma, bu ayrımın uygulamada ne anlama geldiğini inceler, ardından IronBarcode'un her proje türünde aynı şekilde davranan tek bir statik API ile aynı işi nasıl ele aldığını inceler.
Infragistics Barkod Desteğini Anlamak
Infragistics, en köklü .NET UI bileşen satıcılarından biridir. Barkod işlevini kapsayan abonelik olan Infragistics Ultimate suite, WinForms, WPF, ASP.NET, Blazor ve mobil için yüzlerce kontrol içerir. Infragistics'in ağlarını, grafiklerini veya zamanlayıcılarını zaten kullanan ekipler için barkod kontrolleri mantıklı bir eklentidir: zaten abonelik için ödeme yapmaktadırlar.
Ancak barkod desteği birleşik bir kütüphane değildir. Sadece kısmen üst üste binen ayrı yeteneklere sahip iki ayrı derlemeyle sağlanır.
WinForms: UltraWinBarcode
Infragistics.Win.UltraWinBarcode paketi, UltraWinBarcode sınıfı aracılığıylaWinFormsuygulamalarında barkod oluşturma sağlar. API basittir:
// InfragisticsWinFormsgeneration
using Infragistics.Win.UltraWinBarcode;
var barcode = new UltraWinBarcode();
barcode.Symbology = Symbology.Code128;
barcode.Data = "ITEM-12345";
barcode.SaveTo(outputPath);
// InfragisticsWinFormsgeneration
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 semiyoloji ayarlayın, verileri atayın, SaveTo() çağırın. WinForms'daki sadece üretim senaryoları için bu işe yarar. Symbology enum'u, Code128, Code39, QR, EAN13 ve diğerleri gibi yaygın formatları kapsar.
Bu derlemede mevcut olmayan şey bir okuyucudur. UltraBarcodeReader sınıfı yok. Scan() yöntemi yok. Sadece Infragistics.Win.UltraWinBarcode paketini kullanarak birWinFormsuygulamasında bir barkod görüntüsünü okumaya çalışırsanız, çağrılacak bir şey yoktur.
WPF: XamBarcode ve BarcodeReader
WPF tarafı, hem bir oluşturma kontrolünü (XamBarcode) hem de ayrı bir okuma sınıfını (BarcodeReader içinden, Infragistics.WPF.BarcodeReader derlemesinden Infragistics.Controls.Barcodes içinde) içerir. Okuyucu,WPFiş parçacığı ve görüntüleme modelini temel alarak olay yönelimlidir.
WPF'de bir barkod okumak için DecodeComplete olayını bağlamak, görüntüleri dosya yolundan ziyade BitmapSource nesneleri olarak yüklemek ve kodunuz asenkron ise geri çağrı modelini beklenir bir şeye dönüştürmek gerekir.
ASP.NET Core, Konsol, Docker: Hiçbir Şey
net8.0 hedefleyen ancakWPFveyaWinFormsUI derlemeleri olmayan bir Infragistics barkod paketi yok.ASP.NET Coreprojeleri, konsol araçları, Azure Fonksiyonları, Blazor Sunucusu ve Linux Docker konteynerleri için hiçbir Infragistics barkod seçeneği yoktur. Kütüphane UI çerçevesine bağlıdır.
WPFOkuma Düzeni
Infragistics ile WPF'de bir barkod okumanın gerçekte neye benzediği işte bu şekildedir:
// InfragisticsWPFreading: event-driven, requiresWPFassemblies
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 asWPFBitmapSource — not a file path
var bitmap = new BitmapImage(new Uri(imagePath, UriKind.Absolute));
// Build the Symbology flags. The enum is [Flags];
// EAN-8/EAN-13/UPC-A/UPC-E share a single EanUpc flag,
// and Code 39 is exposed as Code39Ext. Use Symbology.All
// to search every supported family.
var symbologies = Symbology.Code128 |
Symbology.Code39Ext |
Symbology.QRCode |
Symbology.EanUpc |
Symbology.Interleaved2Of5;
// Symbology is the second argument to Decode/DecodeAsync,
// not a property on the reader. Result comes via callback.
_reader.DecodeAsync(bitmap, symbologies);
return await _result.Task;
}
private void OnDecodeComplete(object sender, ReaderDecodeArgs e)
{
_result?.TrySetResult(e.SymbolFound ? e.Value : "No barcode found");
}
public void Dispose()
{
if (_reader != null)
{
_reader.DecodeComplete -= OnDecodeComplete;
_reader = null;
}
}
// InfragisticsWPFreading: event-driven, requiresWPFassemblies
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 asWPFBitmapSource — not a file path
var bitmap = new BitmapImage(new Uri(imagePath, UriKind.Absolute));
// Build the Symbology flags. The enum is [Flags];
// EAN-8/EAN-13/UPC-A/UPC-E share a single EanUpc flag,
// and Code 39 is exposed as Code39Ext. Use Symbology.All
// to search every supported family.
var symbologies = Symbology.Code128 |
Symbology.Code39Ext |
Symbology.QRCode |
Symbology.EanUpc |
Symbology.Interleaved2Of5;
// Symbology is the second argument to Decode/DecodeAsync,
// not a property on the reader. Result comes via callback.
_reader.DecodeAsync(bitmap, symbologies);
return await _result.Task;
}
private void OnDecodeComplete(object sender, ReaderDecodeArgs e)
{
_result?.TrySetResult(e.SymbolFound ? e.Value : "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))
' Build the Symbology flags. The enum is [Flags];
' EAN-8/EAN-13/UPC-A/UPC-E share a single EanUpc flag,
' and Code 39 is exposed as Code39Ext. Use Symbology.All
' to search every supported family.
Dim symbologies = Symbology.Code128 Or
Symbology.Code39Ext Or
Symbology.QRCode Or
Symbology.EanUpc Or
Symbology.Interleaved2Of5
' Symbology is the second argument to Decode/DecodeAsync,
' not a property on the reader. Result comes via callback.
_reader.DecodeAsync(bitmap, symbologies)
Return Await _result.Task
End Function
Private Sub OnDecodeComplete(sender As Object, e As ReaderDecodeArgs)
_result?.TrySetResult(If(e.SymbolFound, e.Value, "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, bir barkod okumak için yaklaşık 35 satırlık bir altyapıdır. Aslında neler oluyor, sayalım:
- Bir
BarcodeReaderörneği oluşturulur ve alan olarak canlı tutulur. - Kurucuya bir olay işleyici bağlanır.
ReadBarcodeAsync'a her çağrı, paylaşılan bir alana atanan yeni birTaskCompletionSource<string>oluşturur — bu, bu hizmetin yazıldığı haliyle iş parçacığı güvenli olmadığı anlamına gelir. Eşzamanlı çağrılar_result'u üzerine yazar.- Görüntü bir
BitmapImageolarak birUri'den yüklenmelidir — bir dosya yolu dizesi, bir bayt dizisi veya bir akış değil. DecodeAsync(), olayı asenkron olarak tetikler.TaskCompletionSource, geri çağrı dünyası ile asenkron/bekleme dünyası arasındaki yapıştırıcıdır.- Geri çağrı,
e.SymbolFounddoğru olduğundae.Valueçıkarır. Dispose()yöntemi, bellek sızıntılarını önlemek için olay işleyicisini çıkarmalıdır.
Bu mantığın hiçbir kısmı barkodlarla ilgili değil. Olay yönelimli tasarımı çevrelemek için gerekli altyapıdır. Üretim kodunda, _result.Task asla tamamlanmazsa durumu da ele almanız gerekir — bir zaman aşımı, bir iptal belirteci veya olayın asla tetiklenmemesine karşı bir koruma.
WinFormsBoşluğu
WinForms boşluğu, ilk başta göründüğünden daha keskin bir kopuştur.WinFormsuygulamaları inşa eden ekipler, genellikle bileşenindeki kodu kullanmak için bakarlar. Buldukları, Infragistics.Win.UltraWinBarcode tamamen okuma kabiliyeti sağlamaz.
Bu dökümantasyon ihmali değildir.WinFormsbarkod birimi, bir üretim kontrolü olarak tasarlandı. Eğer birWinFormsuygulamasında — örneğin, bir kullanıcı tarafından yüklenen bir görüntü dosyasından bir barkod okuma veya bir kamera akışından bir barkod çözme gibi — barkod taramanız gerekiyorsa, Infragistics barkod araçları ile bunu yapamazsınız. Tamamen ayrı bir kütüphane getirmeniz gerekir, bu noktada üretim için Infragistics kullanmanın mantıki temeli zayıflar.
Asimetri, karma çerçeve projelerini yürüten ekipler için bir kapsama boşluğu oluşturur. HemWPFmasaüstü istemcisine hem deWinFormsmasaüstü istemcisine sahip bir ekip,WinFormsprojesinde barkod okumak için Infragistics'i kullanamaz, her ne kadar başka her yerde Infragistics kullanıyor olsalar da.
Semoloji Belirlemesi: Sessiz Bir Hata Modu
WPF okuyucusunda Decode()'a Symbology bayrak argümanı, kendi bölümünü hak ediyor çünkü başarısızlık modu sessiz: eksik bir bayrak hatasız boş bir sonuç döndürür.
Okuyucuya çağrı yaptığınızda, aramak istediğiniz her barkod ailesini birlikte OR operatörü ile birleştirirsiniz. Desteklenen aileler QR, EAN/UPC (EanUpc), Kod 39 (Code39Ext), Kod 128, MaxiCode ve Interleaved 2 of 5'dır — DataMatrix enum içinde hiç yer almaz, dolayısıylaWPFokuyucu bunu çözemiyor. Symbology.All enum'daki her şeyi kapsar:
// Build flags explicitly, or use Symbology.All to search every family
var symbologies = Symbology.Code128 |
Symbology.Code39Ext |
Symbology.QRCode |
Symbology.EanUpc |
Symbology.Interleaved2Of5;
_reader.DecodeAsync(bitmap, symbologies);
// Build flags explicitly, or use Symbology.All to search every family
var symbologies = Symbology.Code128 |
Symbology.Code39Ext |
Symbology.QRCode |
Symbology.EanUpc |
Symbology.Interleaved2Of5;
_reader.DecodeAsync(bitmap, symbologies);
' Build flags explicitly, or use Symbology.All to search every family
Dim symbologies = Symbology.Code128 Or
Symbology.Code39Ext Or
Symbology.QRCode Or
Symbology.EanUpc Or
Symbology.Interleaved2Of5
_reader.DecodeAsync(bitmap, symbologies)
Bir barkod görüntüsü bir QR kodu içeriyorsa ve Symbology.QRCode bayraklar arasında yoksa, e.SymbolFound false döner ve e.Value boştur. Kod çözüm olayı hala tetiklenir. Hiçbir istisna atılmaz. Arayan "Barkod bulunamadı" yanıtını alır ve resmin okunamaz mı yoksa sadece yapılandırılmadığını mı gösterecek bir işaret yoktur.
Uygulamada bu şu anlama gelir:
- İlk kurulum, geliştiricinin test ettiği formatlar için sorunsuz bir şekilde çalışır.
- Sistem yeni bir barkod formatı girer (bir tedarikçi etiket türünü değiştirir, yeni bir ürün serisi farklı bir semboloji kullanır).
- Okuyucu bu aile için tüm resimlerde sessizce başarısız olur.
- Arıza, "görselde barkod yoksa" gibi görünür, "format yapılandırılmamış" gibi değil.
Bunu hata ayıklayan ekipler, ailelerinin asla bayraklar listesinde olmadığını fark etmeden önce resim kalitesini incelemeye zaman harcar. DataMatrix daha belirgin bir durumdur: eklenecek bir bayrak yoktur, çünküWPFokuyucu bunu hiç desteklemiyor.
IronBarcode, format argümanı gerektirmez. Her okuyuşta desteklenen her formatı otomatik olarak algılar. Unutulacak bir bayrak yoktur.
PlatformMatrisi
Platformlar arası yetenek boşluğu, mimari kısıtı anlamanın en net yoludur:
| Platform | Infragistics Üretim | Infragistics Okuma | IronBarcode Üretim | IronBarcode Okuma |
|---|---|---|---|---|
| WPF | XamBarcode kontrolü | BarcodeReader (olay yönelimli) | 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 Sunucusu | MEVCUT DEĞİL | MEVCUT DEĞİL | Evet | Evet |
| Docker / Linux | MEVCUT DEĞİL | MEVCUT DEĞİL | Evet | Evet |
| Azure Functions | MEVCUT DEĞİL | MEVCUT DEĞİL | Evet | Evet |
Bu tablo, saltWPFmasaüstü uygulamalarının ötesinde çalışan ekiplerin, Infragistics barkod desteğinin yetersiz olduğunu görmelerinin nedenini açıkça gösteriyor. Bir projeWinFormsve ASP.NET Core'un veyaWPFve bir arka plan işçi hizmetinin kapsamını açtığı an — Infragistics barkod kütüphanesi yalnızca kod tabanının bir bölümünü kapsıyor.
IronBarcode Anlama
IronBarcode, WinForms,WPFveya herhangi bir UI çerçevesine bağımlılığı olmayan, .NET için özel bir barkod kütüphanesidir. Aynı NuGet paketi, aynı ad alanı ve aynı API, herhangi bir .NET projesinde çalışır: WinForms, WPF, ASP.NET Core, konsol, Blazor Sunucusu, Docker, Azure Fonksiyonları, AWS Lambda.
// IronBarcode: identical code in WinForms, WPF, ASP.NET Core, console, Docker
// NuGet: dotnet add package BarCode
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 BarCode
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() statik bir yöntemdir. Yönetilecek bir örnek yok, bağlanacak bir olay yok, geri çağrı modellerini köprüleyecek bir TaskCompletionSource yok. Bir dosya yolu dizesi, bir bayt dizisi, bir Stream veya toplu işleme için bunların herhangi birinin bir dizisini kabul eder.
Oluşturma için, BarcodeWriter.CreateBarcode() 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şlatması uygulama başlangıcında, bir kez yapılır:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Yan Yana: Toplu İşleme
Toplu işleme, InfragisticsWPFokuyucusundaki başka bir yapısal sınırlamayı ortaya çıkarır. Okuyucu paylaşılan bir olay işleyicisi kullanıyor ve her çağrıda _result alanı üzerine yazılıyor, bu nedenle yukarıda gösterilen servis sınıfı birden fazla görüntüyü eşzamanlı işlemeyi güvenli bir şekilde yapamaz. Çağrıları sıralamanız gerekir:
// Infragistics: must process sequentially — shared event handler and TaskCompletionSource
// field mean concurrent calls would overwrite _result before the previous decode completes
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
// field mean concurrent calls would overwrite _result before the previous decode completes
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
Imports System.Threading.Tasks
' Infragistics: must process sequentially — shared event handler and TaskCompletionSource
' field mean concurrent calls would overwrite _result before the previous decode completes
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
Bunu eşzamanlı yapmak, önceki bir çözümleme hala devam ederken _result'un üzerine yazılmamasını sağlamak için bir kilit, bir kuyruk veya bir semafor gibi önemli ek altyapı gerektirir. Bu, basit bir I/O operasyonu için önemli bir eşzamanlılık sorunudur.
IronBarcode'un statik BarcodeReader.Read() iş parçacığı güvenlidir. Ek bir senkronizasyon yapmadan aynı anda birden fazla iş parçacığından çağrılabilir. Toplu işler için, doğrudan Parallel.ForEach 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)
BarcodeReaderOptions üzerinden paralellik yapılandırabilir ve tek bir çağrıda birden fazla dosya geçirebilirsiniz:
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 Barkod | IronBarcode |
|---|---|---|
| WinForms barkod okuma | Mevcut değil | Evet |
| WPF barkod okuma | Evet (olay yönelimli) | Evet (senkron) |
| ASP.NET Çekirdek desteği | Mevcut değil | Evet |
| Konsol / İşçi Hizmeti | Mevcut değil | Evet |
| Docker / Linux | Mevcut değil | Evet |
| Azure Functions | Mevcut değil | Evet |
| Blazor Sunucusu | Mevcut değil | Evet |
| Otomatik format algılama | Hayır — Decode() fonksiyonuna Symbology bayrakları gönderilmeli | Evet — formatlar otomatik tespit edilir |
| PDF barkod okuma | Mevcut değil | Evet — kendi içinde, ekstra paket gerektirmez |
| İş Parçacığı güvenli okuma | Hayır (paylaşılan etkinlik işleyicisi) | Evet (statik API) |
| Etkinlik odaklı API gereklidir | Evet (WPF) | Hayır |
| Açık görüntü yükleme (BitmapSource) | Evet | Hayır — dosya yolu, bayt, akış kabul eder |
| Senkron okuma | Hayır (TaskCompletionSource üzerinden köprü oluşturulmalı) | Evet |
| Toplu işlem | Sadece sıralı (eşzamanlı güvenli değil) | Yerleşik paralelleştirme |
| Görünmez format hataları | Evet (Symbology ailesi hariç bırakılmış) | 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 | Yıllık abonelik (Infragistics Ultimate) | $749'dan başlayan süresiz (Lite) |
API Eşleme Başvurusu
WinForms(UltraWinBarcode) dan IronBarcode'ye
| InfragisticsWinForms— UltraWinBarcode | IronBarcode |
|---|---|
new UltraWinBarcode() |
BarcodeWriter.CreateBarcode(data, encoding) |
barcode.Symbology = Symbology.Code128 |
BarcodeEncoding.Code128 (CreateBarcode için parametre) |
barcode.Data = "ITEM-12345" |
CreateBarcode()'nün ilk argümanı |
barcode.SaveTo(outputPath) |
.SaveAsPng(outputPath) |
| Okuma API'si mevcut değil | BarcodeReader.Read(imagePath) |
WPF(BarcodeReader) dan IronBarcode'ye
| InfragisticsWPF— BarcodeReader | IronBarcode |
|---|---|
new BarcodeReader() |
Statik sınıf — örnek gerekmez |
_reader.DecodeComplete += OnDecodeComplete |
Gerekli değil |
_reader.DecodeAsync(bitmap, Symbology.X |Symbology.Y) |
Otomatik algılama — yapılandırma gerekmez |
new BitmapImage(new Uri(path)) + _reader.Decode(bitmap, ...) |
BarcodeReader.Read(path) |
e.Value (ReaderDecodeArgs içinde) |
result.Value |
e.Symbology (ReaderDecodeArgs içinde) |
result.Format |
TaskCompletionSource<string> asenkron sarmalayıcı |
Senkron — sarmalayıcı gerekmez |
Dispose() — olay işleyicisini ayır |
Gerekli değil — örnek veya etkinlik yok |
| SadeceWPFprojesi | Herhangi bir .NET proje türü |
Takımlar Geçiş Yaptığında
Belirli birkaç durum sürekli olarak ekipleri Infragistics barkod desteğinden uzaklaştırıyor.
WinForms'da okuma gerekli. Bu, en yaygın senaryodur. UltraWinBarcode ile barkodları güzelce oluşturan birWinFormsuygulaması, ardından yeni bir gereksinim gelir: bir yüklenmiş görüntüden bir barkod taramak veya baskıdan önce bir etiketi doğrulamak.WinFormsiçin herhangi bir Infragistics okuma API'si yok. Ekip ya ikinci bir kütüphane getiriyor ya da oluşturma kodunu her ikisini de yapan bir şeyle değiştiriyor.
YeniASP.NET Coreuç noktası. Infragistics barkod üretimi olan bir masaüstü uygulamasına bir web API arkadaşı ekleniyor. Uç nokta, görüntü yüklemeleri kabul etmeli ve barkod değerlerini döndürmeli ya da talep üzerine barkod görüntüleri üretmelidir. Infragistics barkod paketleri ile birASP.NET Coreprojesinde bunların hiçbiri mümkün değil. IronBarcode, dotnet add package BarCode ile yüklenir ve bir denetleyici eyleminde aynı şekilde çalışır, bir konsol yönteminde çalıştığı gibi.
Docker dağıtımı. BirWPFuygulaması konteyner haline getiriliyor veya barkod mantığı bir mikro servise çıkarılıyor.WPFmontajları, Linux Docker konteynerlerinde çalışmaz. InfragisticsWPFBarcodeReader onlarlaydı. IronBarcode, Linux x64'ü yerel olarak hedefler.
Toplu işleme performansı. Bir iş akışı yüzlerce veya binlerce barkod görüntüsünü işler. Etkinlik odaklı Infragistics okuyucu, bunları sıralı olarak işler. IronBarcode'un statik okuyucusu iş parçacığı güvenlidir ve herhangi bir eşzamanlılık altyapısı olmadan Parallel.ForEach veya kendi yerleşik MaxParallelThreads seçeneğini destekler.
Üretim sırasında sessiz format hataları. Bir ekip, belirli bir ailenin barkodlarının haftalarca sessizce başarısız olduğunu, çünkü Symbology bayraklarının Decode()'ya iletilen bayraklarında o ailenin olmadığını keşfeder. Otomatik algılamaya geçmek, bu hata modunu tamamen ortadan kaldırır.
Infragistics abonelik kapsamını azaltma. Bazı ekipler, barkod kontrollerinin bir parçası olduğu için özellikle Infragistics Ultimate abonelik fiyatını ödüyorlar. Barkod gereksinimi abonelik için tek neden olduğunda, maliyetin bir kısmına ayrılmış bir barkod kütüphanesi değerlendirmeye değerdir.
Sonuç
Infragistics barkod desteğiyle ilgili merkezi sorun, yetenekle değil, mimariyle ilgilidir.WPFBarcodeReader barkodları okur.WinFormsUltraWinBarcode onları oluşturur. Her bileşenin tasarlandığı dar bağlam içinde, işlev görürler. Sorun şu ki, bu iki bağlam, çoğu .NET ekibinin gerçekten ihtiyaç duyduğu şeyi kapsamaz.
Modern bir .NET uygulamasındaki bir barkod özelliği, nadiren tek bir UI framework'ünde bulunur. BirWinFormsistemcisi ve bir web API'sinde görünür. Bir Docker konteynerinde ve bir masaüstü ortamında çalışır. Bir ASP.NET uç noktasına yüklenen görüntüleri taraması ve bir konsol aracından etiketleri yazdırması gerekir. Bunların hiçbiri Infragistics barkod paketleri ile çalışmaz veWPFokuyucusunun gerekli semboloji bayrakları ile etkinlik odaklı deseni, çalıştığı tek bağlamda bile önemli ölçüde karmaşıklık ekler.
IronBarcode, aynı problemi çözer - barkodları okuma ve üretme - her .NET proje türünde aynı şekilde derlenen ve çalışan bir statik API ile.WPFbir servis sınıfında yazdığınız BarcodeReader.Read() çağrısı, birASP.NET Coredenetleyicisinde yazdığınız ve bir Linux Docker konteynerinde yazdığınız aynı çağrıdır. Olaylar yok, bayraklar yok, TaskCompletionSource yok. Barkod mantığı 35 satır 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# uygulamalarında barkod oluşturma ve okuma için bir .NET barkod kütüphanesidir. .NET projeleri için bir barkod çözümü seçerken geliştiricilerin değerlendirdiği birkaç alternatiften biridir.
Infragistics Barcode ve IronBarcode arasındaki temel farklar nelerdir?
IronBarcode, örnek yönetimi gerektirmeyen statik, durumsuz bir API kullanırken, Infragistics Barcode genellikle kullanım öncesi örnek oluşturma ve yapılandırma gerektirir. IronBarcode ayrıca yerel PDF desteği, otomatik format tanıma ve tüm ortamlarda tek anahtarlı lisanslama sunar.
IronBarcode, Infragistics Barcode'den daha mı kolay lisanslanır?
IronBarcode hem geliştirme hem de üretim dağıtımlarını kapsayan tek bir lisans anahtarı kullanır. Bu, SDK anahtarlarını çalışma zamanı anahtarlarından ayıran lisanslama sistemlerine kıyasla CI/CD hatlarını ve Docker yapılandırmalarını basitleştirir.
IronBarcode, Infragistics Barcode'un desteklediği tüm barkod formatlarını destekliyor mu?
IronBarcode, QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztek, EAN-13, UPC-A, GS1 ve daha birçokları dahil olmak üzere 30'dan fazla barkod sembolojisini destekler. Format otomatik algılama, açıkça format sayımını gerektirmez.
IronBarcode doğal PDF barkod okuma desteği sunuyor mu?
Evet. IronBarcode, ayrı bir PDF render kütüphanesi gerektirmeden, BarcodeReader.Read('document.pdf') kullanarak PDF dosyalarından doğrudan barkod okur. Sayfa bazında sonuçlar sayfa numarası, barkod formatı, değeri ve güven puanını içerir.
IronBarcode, toplu işlem konusunda Infragistics Barcode'a kıyasla nasıl bir performans sergiliyor?
IronBarcode'un statik yöntemleri durum terkibesizdir ve doğal olarak thread-safe'dir, bu da thread başına örnek yönetimi olmadan Parallel.ForEach'in doğrudan kullanımına olanak tanır. Herhangi bir fiyatlandırma seviyesinde bir throughput tavanı 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 paketinde destekler. Platform hedefleri arasında Windows x64/x86, Linux x64 ve macOS x64/ARM bulunur.
Bir .NET projesine IronBarcode'u nasıl kurarım?
IronBarcode'u NuGet üzerinden kurun: Paket Yöneticisi Konsolunda 'Install-Package IronBarCode' komutunu veya CLI'da 'dotnet add package IronBarCode' komutunu çalıştırın. Ek bir SDK yükleyicisi veya çalışma zamanı dosyası gerekmez.
Infragistics'in aksine IronBarcode'u satın almadan önce değerlendirebilir miyim?
Evet. IronBarcode'un deneme modu, yalnızca oluşturulan çıktı görüntülerine bir filigran ekleyerek, barkod değerlerini tam olarak döndürür. Satın almadan önce, kendi belgelerinizde okuma doğruluğunu kıyaslayabilirsiniz.
Infragistics Barcode ile IronBarcode arasındaki fiyat farkı nedir?
IronBarcode, geliştirme ve üretimi kapsayan, sürekli bir tek geliştirici lisansı için $749'dan başlar. Fiyat detayları ve hacim seçenekleri IronBarcode lisanslama sayfasında mevcuttur. Ayrı bir çalışma zamanı lisansı gerekliliği yoktur.
Infragistics Barcode'dan IronBarcode'a geçiş kolay mı?
Infragistics Barcode'dan IronBarcode'a geçiş, esas olarak örnek tabanlı API çağrılarını IronBarcode'un statik metotları ile değiştirmeyi, lisanslama şablonunu kaldırmayı ve sonuç özelliği adlarını güncellemeyi içerir. Çoğu geçiş, kod eklemek yerine kodu azaltmayı içerir.
IronBarcode, logolu QR kodları üretebiliyor mu?
Evet. QRCodeWriter.CreateQrCode().AddBrandLogo('logo.png'), konfigüre edilebilir hata düzeltme ile QR koduna yerel olarak bir marka görüntüsü yerleştirir. Renkli QR kodları, ChangeBarCodeColor() ile de desteklenir.

