Altbilgi içeriğine atla
VIDEOLAR

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

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
# 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
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;
// 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;
Imports IronBarCode
$vbLabelText   $csharpLabel

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";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode

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

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

Sonrası (IronBarcode):

// NuGet: dotnet add package IronBarcode
using IronBarCode;

BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
             .SaveAsPng(outputPath);
// NuGet: dotnet add package IronBarcode
using IronBarCode;

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

BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128) _
             .SaveAsPng(outputPath)
$vbLabelText   $csharpLabel

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);
using IronBarCode;

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

BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128) _
             .ResizeTo(400, 100) _
             .SaveAsPng(outputPath)
$vbLabelText   $csharpLabel

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

    Dim bitmap As New BitmapImage(New Uri(imagePath, UriKind.Absolute))

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

    _reader.Decode(bitmap)
    Return Await _result.Task
End Function

Private Sub OnDecodeComplete(sender As Object, e As ReaderDecodeArgs)
    _result?.TrySetResult(If(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
$vbLabelText   $csharpLabel

Sonra (IronBarcode — 2 satır):

using IronBarCode;

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

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

Dim results = BarcodeReader.Read(imagePath)
Return If(results.FirstOrDefault()?.Value, "No barcode found")
$vbLabelText   $csharpLabel

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}");
}
using IronBarCode;

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

Dim results = BarcodeReader.Read(imagePath)
Dim first = results.FirstOrDefault()
If first IsNot Nothing Then
    Console.WriteLine($"Value: {first.Value}, Format: {first.Format}")
End If
$vbLabelText   $csharpLabel

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})");
}
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})");
}
Imports IronBarCode

' In a WinForms button handler or service method — same API as WPF or ASP.NET Core
Dim results = BarcodeReader.Read(imagePath)
For Each result In results
    MessageBox.Show($"Found: {result.Value} ({result.Format})")
Next
$vbLabelText   $csharpLabel

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");
    }
}
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");
    }
}
Imports IronBarCode
Imports Microsoft.AspNetCore.Mvc

<ApiController>
<Route("api/barcode")>
Public Class BarcodeController
    Inherits ControllerBase

    <HttpPost("read")>
    Public Function ReadBarcode(imageFile As IFormFile) As IActionResult
        Using stream = imageFile.OpenReadStream()
            Dim results = BarcodeReader.Read(stream)
            Dim values = results.Select(Function(r) New With {Key .Value = r.Value, Key .Format = r.Format.ToString()})
            Return Ok(values)
        End Using
    End Function

    <HttpGet("generate")>
    Public Function GenerateBarcode(<FromQuery> data As String) As IActionResult
        Dim bytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
                                  .ResizeTo(400, 100) _
                                  .ToPngBinaryData()
        Return File(bytes, "image/png")
    End Function
End Class
$vbLabelText   $csharpLabel

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})");
}
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})");
}
Imports IronBarCode

' Read all barcodes from every page of a PDF
Dim results = BarcodeReader.Read("document.pdf")
For Each result In results
    Console.WriteLine($"Page {result.PageNumber}: {result.Value} ({result.Format})")
Next
$vbLabelText   $csharpLabel

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();
// 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();
Imports System.Collections.Generic

' Must process one at a time — shared _result field is not thread-safe
Dim service As New InfragisticsBarcodeService()
Dim results As New List(Of String)()

For Each file In imageFiles
    Dim value As String = Await service.ReadBarcodeAsync(file)
    results.Add(value)
Next

service.Dispose()
$vbLabelText   $csharpLabel

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})");
}
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})");
}
Imports IronBarCode

' Option 1: pass an array directly —IronBarcode handles parallelization internally
Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True,
    .MaxParallelThreads = 4
}

Dim results = BarcodeReader.Read(imageFiles.ToArray(), options)
For Each result In results
    Console.WriteLine($"{result.Value} ({result.Format})")
Next
$vbLabelText   $csharpLabel
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);
});
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);
});
Imports IronBarCode
Imports System.Collections.Concurrent

' Option 2: Parallel.ForEach — static BarcodeReader.Read is thread-safe
Dim allValues As New ConcurrentBag(Of String)()

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

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>();
// 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>();
' Before: service registered as IDisposable in DI container
services.AddScoped(Of InfragisticsBarcodeService)() ' implements IDisposable

' After: no registration needed — use static method directly, or wrap in thin service if preferred
' services.AddScoped(Of IBarcodeService, IronBarcodeService)()
$vbLabelText   $csharpLabel

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();
}
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();
}
Imports IronBarCode

Public Class BarcodeService
    Public Function Read(path As String) As IEnumerable(Of String)
        Return BarcodeReader.Read(path).Select(Function(r) r.Value)
    End Function

    Public Function Generate(data As String, encoding As BarcodeEncoding) As Byte()
        Return BarcodeWriter.CreateBarcode(data, encoding).ToPngBinaryData()
    End Function
End Class
$vbLabelText   $csharpLabel

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);
using IronBarCode;

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

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

Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = False
}

Dim results = BarcodeReader.Read(imagePath, options)
$vbLabelText   $csharpLabel

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"));
// 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"));
' 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"))
$vbLabelText   $csharpLabel

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";
// Before
var value = await service.ReadBarcodeAsync(imagePath);

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

Ş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";
    });
}
public Task<string> ReadBarcodeAsync(string imagePath)
{
    return Task.Run(() =>
    {
        var results = BarcodeReader.Read(imagePath);
        return results.FirstOrDefault()?.Value ?? "No barcode found";
    });
}
Option Strict On



Public Function ReadBarcodeAsync(imagePath As String) As Task(Of String)
    Return Task.Run(Function()
                        Dim results = BarcodeReader.Read(imagePath)
                        Return If(results.FirstOrDefault()?.Value, "No barcode found")
                    End Function)
End Function
$vbLabelText   $csharpLabel

Özellik Adı Değişiklikleri

Infragistics IronBarcode
e.Value (içinde ReaderDecodeArgs) result.Value
e.Symbology (içinde ReaderDecodeArgs) result.Format
barcode.Data BarcodeWriter.CreateBarcode() ilk parametre
barcode.Symbology = Symbology.Code128 BarcodeEncoding.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" .
# 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ı

Özellik Infragistics Barkod IronBarcode
WinForms barkod üretimi Evet (UltraWinBarcode) Evet
WinForms barkod okuma Mevcut değil Evet
WPF barkod üretimi Evet (XamBarcode) Evet
WPF barkod okuma Evet (olay yönelimli) Evet (senkron)
ASP.NET Core 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 — SymbologyType bayrakları gerekti Evet
PDF barkod okuma Mevcut değil Evet (yerel)
Eşzamanlı iş parçacığı güvenli okumalar Hayır Evet
Toplu okuma (yerleşik) Hayır Evet
QR hata düzeltme kontrolü Mevcut değil Evet
Statik API (örnek yok) Hayır Evet
Suite aboneliği gerekti Evet (Infragistics Ultimate, 2.399+ USD/yıl) Hayır
Süresiz lisans Hayır Evet — 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ınInfragistics, 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.

Sıkça Sorulan Sorular

Neden Infragistics Barcode'dan IronBarcode'a geçiş yapmalıyım?

Yaygın nedenler arasında lisanslamanın basitleştirilmesi (SDK + runtime anahtar karmaşıklığının kaldırılması), veri geçiş limitlerinin ortadan kaldırılması, yerel PDF desteği kazanılması, Docker/CI/CD dağıtımının iyileştirilmesi ve üretim kodunda API tekrarlama azalması yer alır.

Infragistics API çağrılarını IronBarcode ile nasıl değiştiririm?

Örnek oluşturma ve lisanslama tekrarlamalarını IronBarCode.License.LicenseKey = "anahtar" ile değiştirin. Okuyucu çağrılarını BarcodeReader.Read(yol) ile ve yazıcı çağrılarını BarcodeWriter.CreateBarcode(veri, kodlama) ile değiştirin. Statik yöntemler örnek yönetimi gerektirmez.

Infragistics Barcode'dan IronBarcode'a geçiş sırasında ne kadar kod değişiyor?

Çoğu geçiş daha az kod satırıyla sonuçlanır. Lisanslama tekrarlamaları, örnek oluşturucular ve açık format yapılandırması kaldırılır. Temel okuma/yazma işlemleri, daha temiz sonuç nesneleriyle daha kısa IronBarcode eşdeğerlerine dönüştürülür.

Geçiş sırasında hem Infragistics Barcode hem de IronBarcode'un yüklü kalması gerekiyor mu?

Hayır. Çoğu geçiş doğrudan değişim yapılır, paralel bir işletim yerine geçer. Bir hizmet sınıfını bir seferde geçirin, NuGet referansını değiştirin ve sonraki sınıfa geçmeden önce başlatma ve API çağrı desenlerini güncelleyin.

IronBarcode için NuGet paketi adı nedir?

Paket 'IronBarCode' (büyük B ve C harfleriyle). 'Install-Package IronBarCode' veya 'dotnet add package IronBarCode' ile kurun. Kodda kullanılan yönerge 'using IronBarCode;' şeklindedir.

IronBarcode, Docker dağıtımını Infragistics Barcode'a kıyasla nasıl kolaylaştırır?

IronBarcode, harici SDK dosyaları veya montajlı lisans yapılandırması olmayan bir NuGet paketidir. Docker'da, IRONBARCODE_LICENSE_KEY ortam değişkenini ayarlayın ve paket lisans doğrulamasını başlangıçta kendi kendine yapar.

IronBarcode, Infragistics'ten göç ettikten sonra tüm barkod formatlarını otomatik olarak algılıyor mu?

Evet. IronBarcode, desteklenen tüm formatlardaki sembolojiyi otomatik olarak algılar. Açık BarcodeTypes sayımı gerekli değildir. Format zaten biliniyorsa ve performans önemliyse, BarcodeReaderOptions arama alanını optimize etmek için sınırlamayı sağlar.

IronBarcode, ayrı bir kütüphane olmadan PDF'lerden barkod okuyabiliyor mu?

Evet. BarcodeReader.Read("document.pdf") PDF dosyalarını yerel olarak işlemler. Sonuçlar her barkod için SayfaNumarası, Format, Değer ve Güven içerir. Harici bir PDF render adımı gerekmez.

IronBarcode, paralel barkod işlemeyi nasıl yönetiyor?

IronBarcode'un statik yöntemleri durumsuz ve thread-safe'dir. Dağıtılmış dosya listeleri üzerinde per-thread örnek yönetimi olmadan doğrudan Parallel.ForEach kullanın. BarcodeReaderOptions.MaxParallelThreads, iç thread bütçesini kontrol eder.

Infragistics Barcode'dan IronBarcode'a geçiş yaparken hangi sonuç özellikleri değişiyor?

Yaygın yeniden adlandırmalar: BarcodeValue, Value olur; BarcodeType, Format olur. IronBarcode sonuçları ayrıca Güven ve SayfaNumarası ekler. Çözüm çapında arama-değiştirme, mevcut sonuç işleme kodundaki yeniden adlandırmaları ele alır.

Bir CI/CD hattında IronBarcode lisanslamasını nasıl ayarlayabilirim?

IRONBARCODE_LICENSE_KEY'i bir boru hattı sırrı olarak saklayın ve uygulama başlangıç kodunda IronBarCode.License.LicenseKey olarak atayın. Bir sır, geliştirme, test, aşama ve üretim dahil olmak üzere tüm ortamları kapsar.

IronBarcode, özel biçimlendirmeye sahip QR kodu üretimini destekliyor mu?

Evet. QRCodeWriter.CreateQrCode() özelleştirilmiş renkler için ChangeBarCodeColor(), logo yerleştirme için AddBrandLogo(), yapılandırılabilir hata düzeltme seviyeleri ve PNG, JPG, PDF ve akış dahil birden çok çıktı formatını destekler.

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ı...

Daha Fazla Oku

Iron Destek Ekibi

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