IRONSOFTWAREHOME
VIDEOLAR

.NET MAUI Kullanarak C#'ta Barkod Nasıl Okunur & Taranır

Curtis Chau
Curtis Chau
Updated: 1 Ağustos 2026

#InfragisticsBarkod'dan IronBarcode'a Geçiş

ÇoğuInfragisticsbarkod geçişi, ekip yalnızca barkod üretimi sağlanan bir projede barkod okuma gereksinimi olduğu için olur — WinForms,ASP.NET Coreveya WPF dışındaki herhangi bir projede — ya da olay güdümlü WPF okuyucu API'si üretim kullanımı için çok kırılgan olduğunu kanıtladığından dolayı. TaskCompletionSource köprü deseni, eşzamanlı çağrıları güvensiz hale getiren ortak _result alanı ve eksik SymbologyType bayraklarından kaynaklanan sessiz hatalar, ekiplerin alternatif aramasının yaygın nedenleridir.

Bu kılavuz,Infragisticsbarkod paketlerini kaldırma, hem WinForms hem WPF bağlamlarındaki üretim ve okuma kodunu değiştirme ve Infragistics'in hiç destek sağlamadığı proje türlerine barkod işlevselliği ekleme konularında tüm geçiş sürecini anlatır.

Hızlı Başlangıç

1. Adım:InfragisticsBarkod Paketlerini Kaldırma

ProjenizdenInfragisticsbarkod NuGet paketlerini kaldırın. Hangi hedefleri kullandığınıza bağlı olarak,

# WinForms generation package
dotnet remove package Infragistics.WinForms.Barcode

# WPF reading package
dotnet remove package Infragistics.WPF.BarcodeReader
SHELL

Eğer proje dosyanız her iki referansı da içeriyorsa, ikisini de kaldırın. Eğer başkaInfragisticsbileşenleri kullanıyorsanız, barkod spesifik paketlerin kaldırılması,InfragisticsUltimate lisansını etkilemez.

2. Adım: IronBarcode'u Kurun

dotnet add package IronBarcode
SHELL

IronBarcode, WinForms, WPF, ASP.NET Core, konsol, Blazor Sunucu, Docker, Azure İşlevleri ve AWS Lambda genelinde çalışan tek bir pakettir. Çerçevenin başına ayrı paketler gerekmemektedir.

3. Adım: Namespace'leri Güncelleme

Infragistics barkod ad alanlarını IronBarCode (büyük B, büyük C) ile değiştirin:

// Remove these:
// using Infragistics.Win.UltraWinBarcode;
// using Infragistics.Controls.Barcodes;
// using System.Windows.Media.Imaging; // if only used for barcode BitmapImage loading

// Add this:
using IronBarCode;

4. Adım: Lisansı Başlatma

Lisans başlatma işlemini uygulama başlangıcında bir kez ekleyin — Program.cs, App.xaml.cs veya DI kompozisyon kökünüz:

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

Kod Göç Örnekleri

WinForms Üretim: UltraWinBarcode'dan BarcodeWriter'a

WinForms oluşturma deseni, IronBarcode'un BarcodeWriter ile temiz bir şekilde eşlenir:

Önce (Infragistics WinForms):

using Infragistics.Win.UltraWinBarcode;

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

Sonrası (IronBarcode):

// NuGet: dotnet add package IronBarcode
using IronBarCode;

BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
             .SaveAsPng(outputPath);

Infragistics Symbology numaralandırma değeri, bir özellik atamasından ziyade CreateBarcode() için bir parametre olan BarcodeEncoding numaralandırmasına taşınır. Veriler ilk argüman olur. SaveTo(), çıktı formatınıza bağlı olarak .SaveAsPng(), .SaveAsJpeg(), .SaveAsSvg() veya .SaveAsPdf() olarak değişir.

Barkodu kaydetmeden önce yeniden boyutlandırmanız gerekiyorsa:

using IronBarCode;

BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
             .ResizeTo(400, 100)
             .SaveAsPng(outputPath);

WPF Olay Güdümlü Okuma: Hizmet Sınıfından İki Satıra

Bu geçişteki en önemli azaltma budur.InfragisticsWPF okuma modeli tam bir hizmet sınıfı gerektirir:

Önce (Infragistics WPF — ~35 satır):

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>();

    var bitmap = new BitmapImage(new Uri(imagePath, UriKind.Absolute));

    _reader.SymbologyTypes = Symbology.Code128 |
                             Symbology.Code39 |
                             Symbology.QRCode |
                             Symbology.EAN8 |
                             Symbology.EAN13 |
                             Symbology.UpcA |
                             Symbology.Interleaved2Of5;

    _reader.Decode(bitmap);
    return await _result.Task;
}

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

public void Dispose()
{
    if (_reader != null)
    {
        _reader.DecodeComplete -= OnDecodeComplete;
        _reader = null;
    }
}

Sonra (IronBarcode — 2 satır):

using IronBarCode;

var results = BarcodeReader.Read(imagePath);
return results.FirstOrDefault()?.Value ?? "No barcode found";

Tüm servis sınıfı — nesne yönetimi, olay bağlantısı, TaskCompletionSource, BitmapImage yükleme, Dispose() — tamamen kaldırıldı. BarcodeReader.Read() eşzamanlıdır, statiktir ve bir dosya yolu dizgesini doğrudan kabul eder.

Eğer semboloji türünü de döndürüyorsanız:

using IronBarCode;

var results = BarcodeReader.Read(imagePath);
var first = results.FirstOrDefault();
if (first != null)
{
    Console.WriteLine($"Value: {first.Value}, Format: {first.Format}");
}

result.Value, e.Value ile değiştirilir. result.Format, e.Symbology ile değiştirilir.

WinForms Okuma Eklemek (Önceden İmkânsız)

Sadece üretimi olan bir WinForms projesindeyseniz, okuma şimdi aynı paketle kullanılabilir.

using IronBarCode;

// In a WinForms button handler or service method — same API as WPF or ASP.NET Core
var results = BarcodeReader.Read(imagePath);
foreach (var result in results)
{
    MessageBox.Show($"Found: {result.Value} ({result.Format})");
}

Ekstra paket yok, framework-spesifik kurulum yok. Aynı BarcodeReader.Read() çağrısı, WinForms'ta olduğu gibi WPF'de çalışır.

ASP.NET Çekirdek Uç Nokta (Önceden İmkânsız)

Infragistics paketleri ile birASP.NET Coredenetleyicisi içinde barkod üretimi ve okuma mümkün değildi.IronBarcode ile:

using IronBarCode;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/barcode")]
public class BarcodeController : ControllerBase
{
    [HttpPost("read")]
    public IActionResult ReadBarcode(IFormFile imageFile)
    {
        using var stream = imageFile.OpenReadStream();
        var results = BarcodeReader.Read(stream);
        var values = results.Select(r => new { r.Value, Format = r.Format.ToString() });
        return Ok(values);
    }

    [HttpGet("generate")]
    public IActionResult GenerateBarcode([FromQuery] string data)
    {
        var bytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
                                 .ResizeTo(400, 100)
                                 .ToPngBinaryData();
        return File(bytes, "image/png");
    }
}

BarcodeReader.Read() bir Stream doğrudan kabul eder — yükleme işlemini önce diske kaydetmeye gerek yok.

PDF Barkod Okuma

IronBarcode, PDF belgelerinden barkod okur — ayrı bir paket gerektirmez.

using IronBarCode;

// Read all barcodes from every page of a PDF
var results = BarcodeReader.Read("document.pdf");
foreach (var result in results)
{
    Console.WriteLine($"Page {result.PageNumber}: {result.Value} ({result.Format})");
}

Infragistics'in bir karşılığı yoktu — PDF barkod okuma, PDF sayfalarını dışarıda taramadan önce görsellere dönüştürmeyi gerektiriyordu.

Toplu İşleme: Sıralıdan Paralel'e

Önce (Infragistics — sıralı, paralelleştirmeye uygun değil):

// Must process one at a time — shared _result field is not thread-safe
var service = new InfragisticsBarcodeService();
var results = new List<string>();

foreach (var file in imageFiles)
{
    var value = await service.ReadBarcodeAsync(file);
    results.Add(value);
}

service.Dispose();

Sonra (IronBarcode — paralel, iş parçacığı güvenli):

using IronBarCode;

// Option 1: pass an array directly —IronBarcode handles parallelization internally
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    MaxParallelThreads = 4
};

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

// Option 2: Parallel.ForEach — static BarcodeReader.Read is thread-safe
var allValues = new ConcurrentBag<string>();

Parallel.ForEach(imageFiles, file =>
{
    var results = BarcodeReader.Read(file);
    foreach (var r in results)
        allValues.Add(r.Value);
});

Dispose Desenini Kaldırma

KodunuzdaInfragisticsBarcodeReader etrafında IDisposable uygulamalarınız varsa, bunlar tamamen kaldırılabilir. IronBarcode'un BarcodeReader statik bir sınıftır. Oluşturulacak bir örnek yok, ayrılacak bir olay işleyici yok ve çağrılacak bir Dispose() yok.

// Before: service registered as IDisposable in DI container
services.AddScoped<InfragisticsBarcodeService>(); // implements IDisposable

// After: no registration needed — use static method directly, or wrap in thin service if preferred
// services.AddScoped<IBarcodeService, IronBarcodeService>();

DI amaçlı ince bir kaplama hizmeti basittir.

using IronBarCode;

public class BarcodeService
{
    public IEnumerable<string> Read(string path)
        => BarcodeReader.Read(path).Select(r => r.Value);

    public byte[] Generate(string data, BarcodeEncoding encoding)
        => BarcodeWriter.CreateBarcode(data, encoding).ToPngBinaryData();
}

Konstruktor enjeksiyonu yok, Dispose() yok, olay yönetimi yok.

Yaygın Geçiş Sorunları

SymbologyType Bayrakları Kaldırıldı

Infragistics WPF okuyucusundaki SymbologyTypes özelliği, desteklemek istediğiniz her barkod formatını listelemenizi gerektiriyordu. IronBarcode'un bir karşılığı yok — her okumada tüm 50+ formatı otomatik olarak algılar.

Bu önemli bir yan etkiye sahiptir: Eğer belirli bir barkod formatı listede SymbologyType bayrağı eksik olduğu için sessizce başarısız oluyorsa,IronBarcodeşimdi onu bulacaktır. Üretimde sessizce yutulmuş barkod değerleri görebilirsiniz. Bu doğru davranış — bu barkodlar zaten oradaydı.

Hangi formatların döndüğünü sınırlamanız gerekiyorsa (performans veya belirsizlik nedenleriyle), BarcodeReaderOptions bunu destekler:

using IronBarCode;

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = false
};

var results = BarcodeReader.Read(imagePath, options);

BitmapImage Yüklemeye Gerek Yok

Infragistics WPF okuyucusu, görüntülerin new BitmapImage(new Uri(path, UriKind.Absolute)) aracılığıyla BitmapSource nesneleri olarak yüklenmesini gerektiriyordu. IronBarcode, dosya yolu dizelerini, bayt dizilerini ve akışları doğrudan kabul eder.

// All of these work — no BitmapImage conversion needed
BarcodeReader.Read("path/to/image.png");
BarcodeReader.Read(File.ReadAllBytes("path/to/image.png"));
BarcodeReader.Read(File.OpenRead("path/to/image.png"));

Barkodla ilgili görüntü yüklemeleri için yalnızca var olan using System.Windows.Media.Imaging; bildirimlerini kaldırabilirsiniz.

TaskCompletionSource Deseni Kaldırıldı

Olay güdümlü DecodeComplete geri çağırmayı asenkron koda köprüleyen TaskCompletionSource<string> alanı tamamen kaldırıldı. BarcodeReader.Read() eşzamanlıdır ve sonuçlarını doğrudan döndürür.

Çağıran kodunuz await service.ReadBarcodeAsync(path) idiyse, şu şekilde basitleştirebilirsiniz:

// Before
var value = await service.ReadBarcodeAsync(imagePath);

// After
var value = BarcodeReader.Read(imagePath).FirstOrDefault()?.Value ?? "No barcode found";

Şayet çağıranlar için senkronize olmayan bir arayüzü korumak isterseniz, bir iş parçacığını tıkamadan:

public Task<string> ReadBarcodeAsync(string imagePath)
{
    return Task.Run(() =>
    {
        var results = BarcodeReader.Read(imagePath);
        return results.FirstOrDefault()?.Value ?? "No barcode found";
    });
}

Özellik Adı Değişiklikleri

InfragisticsIronBarcode
e.Value (içinde ReaderDecodeArgs)result.Value
e.Symbology (içinde ReaderDecodeArgs)result.Format
barcode.DataBarcodeWriter.CreateBarcode() ilk parametre
barcode.Symbology = Symbology.Code128BarcodeEncoding.Code128 (parametre)
barcode.SaveTo(path).SaveAsPng(path) / .SaveAsJpeg(path) / .SaveAsSvg(path)

Geçiş Kontrol Listesi

Kod tabanınızdaki tümInfragisticsbarkod kullanımlarını bulmak için bu grep kalıplarını kullanın:

# Namespace references
grep -r "Infragistics.WinForms.Barcode\|Infragistics.Win.UltraWinBarcode" --include="*.cs" .
grep -r "Infragistics.Controls.Barcodes" --include="*.cs" .
grep -r "Infragistics.WPF.BarcodeReader" --include="*.csproj" .

# WinForms generation types
grep -r "UltraWinBarcode" --include="*.cs" .
grep -r "Symbology\.Code" --include="*.cs" .
grep -r "barcode\.SaveTo(" --include="*.cs" .

# WPF reading types and patterns
grep -r "new BarcodeReader()" --include="*.cs" .
grep -r "DecodeComplete" --include="*.cs" .
grep -r "ReaderDecodeArgs" --include="*.cs" .
grep -r "SymbologyType\." --include="*.cs" .
grep -r "e\.Value\|ReaderDecodeArgs" --include="*.cs" .
grep -r "BitmapImage" --include="*.cs" .

# TaskCompletionSource usage (likely barcode-related if near above patterns)
grep -r "TaskCompletionSource" --include="*.cs" .
SHELL

Her bir eşleşme üzerinde çalışın:

  • UltraWinBarcode kullanımları: BarcodeWriter.CreateBarcode() ile değiştirin
  • new BarcodeReader() + DecodeComplete blokları: BarcodeReader.Read() ile değiştirin
  • SymbologyType bayrak listeleri: tamamen silin
  • Barkod girdisi için kullanılan BitmapImage yüklemeleri: doğrudan yol/akış/bayt ile değiştirin
  • ReaderDecodeArgs e geri çağırma gövdeleri: e.Value çıkart → result.Value, e.Symbology çıkart → result.Format
  • Barkod servis sınıflarındaki IDisposable: tek kullanımlık kaynak yalnızca _reader ise kaldırın

Özellik Karşılaştırması

ÖzellikInfragistics BarkodIronBarcode
WinForms barkod üretimiEvet (UltraWinBarcode)Evet
WinForms barkod okumaMevcut değilEvet
WPF barkod üretimiEvet (XamBarcode)Evet
WPF barkod okumaEvet (olay yönelimli)Evet (senkron)
ASP.NET CoreMevcut değilEvet
Konsol / İşçi HizmetiMevcut değilEvet
Docker / LinuxMevcut değilEvet
Azure FunctionsMevcut değilEvet
Blazor SunucusuMevcut değilEvet
Otomatik format algılamaHayır — SymbologyType bayrakları gerektiEvet
PDF barkod okumaMevcut değilEvet (yerel)
Eşzamanlı iş parçacığı güvenli okumalarHayırEvet
Toplu okuma (yerleşik)HayırEvet
QR hata düzeltme kontrolüMevcut değilEvet
Statik API (örnek yok)HayırEvet
Suite aboneliği gerektiEvet (Infragistics Ultimate, 2.399+ USD/yıl)Hayır
Süresiz lisansHayırEvet — 749 $ 'dan başlayan

Geçiş Setelahı Temel Faydalar

WinForms'ta barkod okuma. Eğer geçiş WinForms okuma gereksinimi tarafından yönlendirildiyse, bu birincil sonuçtur: BarcodeReader.Read(imagePath) WinForms'ta derlenir ve çalışır, ek bir kurulum gerekmez.

ASP.NET Core ve konsol desteği. Web API'leri, arka plan hizmetleri ve konsol araçları artık aynı paketle hem barkod üretebilir hem de okuyabilir. Eğer bu proje türleri için ayrı araç zincirleri veya dolaşma yolları bakımı yapıyorsanız, şimdi yoktur.

Olay işleyici şablonu yok. DecodeComplete işleyici, TaskCompletionSource köprüsü, BitmapImage yükleme ve Dispose() temizleme hepsi kaldırıldı. Barkod mantığı kalır.

Semboloji spesifikasyonu yok. Eksik SymbologyType bayrakları nedeniyle sessizce başarısız olan formatlar şimdi doğru algılanacak. Otomatik algılama, yapılandırma olmadan tüm 50+ formatı kapsar.

Tüm proje türlerinde aynı servis sınıfı. WinForms, WPF,ASP.NET Coreve çözümdeki herhangi bir projede kullanılmak üzere tek bir BarcodeService sarmalayıcı, BarcodeReader.Read() ve BarcodeWriter.CreateBarcode() kullanır. Çerçeveye özel uygulamalar yok.

Sadece barkod işlevselliği içinInfragisticsUltimate aboneliğine gerek yok. Eğer proje bilginizde birInfragisticsUltimate aboneliğine sahip olan varsa, veya karar içinde önemli bir faktör ise,IronBarcode bağımsız bir pakettir ve süresiz lisanslama seçenekleri 749 $'dan bir geliştirici için başlamakta.

Geçiş işlemi,Infragisticsbarkod kullanımını tespit ettikten sonra mekanik hale gelir. En karmaşık bölüm, WPF servis sınıfının değiştirilmesidir ve bu bile sınıfı kaldırıp çağrıları BarcodeReader.Read() ile değiştirmeye indirgenir. Üretim geçişi, bir-birine özellik/metod adlandırma. Geri aldığınız tek şey, ihtiyacınız olan her proje türündeki tek ve tutarlı bir API'dir.

Lütfen dikkate alın: Infragistics, ilgili sahibinin tescilli ticari markasıdır. Bu site,Infragisticsile bağlantılı değildir,Infragisticstarafından onaylanmamıştır veya desteklenmemektedir. Tüm ürün adları, logolar ve markalar kendi sahiplerine aittir. Karşılaştırmalar, yalnızca bilgilendirme amaçlıdır ve yazı sırasında halka açık bilgilerle alakalı olarak yansıtılmaktadır.
Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapılandırılmış, görsel olarak çekici kılavuzlar oluşturmayı seviyor.

...
Daha Fazla Oku

İlgili Makaleler

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Ücretsiz Canlı Demo rezervasyonu yapın
Booking Badge

Dünya Çapında Milyonlarca Mühendisin Güvendiği

Iron Software müşteri logoları
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez