IRONSOFTWAREHOME
影片

從 Infragistics Barcode 遷移到 IronBarcode

Curtis Chau
Curtis Chau
Updated: 2026年8月1日

大多數的 Infragistics 條碼遷移是因為團隊需要在項目中進行條碼閱讀,而僅有生成功能可用──這些項目包括 WinForms、ASP.NET Core 或任何 WPF 外的項目──或是因為事件驅動的 WPF 閱讀器 API 在生產環境中過於不穩定。 TaskCompletionSource 桥接模式,共用的 _result 字段導致併發調用不安全,以及因缺少 SymbologyType 標誌而導致的靜默失敗,都是團隊尋找替代方案的常見原因。

本指南遍及完整的遷移過程:移除 Infragistics 條碼套件、在 WinForms 和 WPF 環境中替換生成和閱讀程式碼,並為 Infragistics 不支援的項目型別新增條碼功能。

快速開始

步驟1:移除 Infragistics Barcode 套件

從您的專案中移除 Infragistics 條碼 NuGet 套件。 依您所使用的目標而定:

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

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

如果專案文件同時引用兩者,則將兩者移除。 如果您在使用其他 Infragistics 組件,則移除條碼相關的套件不會影響 Infragistics Ultimate 授權。

步驟2:安裝 IronBarcode

dotnet add package IronBarcode
SHELL

IronBarcode 是一個單一套件,適用於 WinForms、WPF、ASP.NET Core、控制台、Blazor Server、Docker、Azure Functions 和 AWS Lambda。 您不需要為每個框架單獨使用套件。

步驟3:更新命名空間

將 Infragistics 條碼命名空間替換為 IronBarCode(大寫 B、大寫 C):

// 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:初始化授權

在應用程式啟動時,初始化授權──App.xaml.cs 或您的 DI composition root:

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

程式碼遷移範例

WinForms 生成:UltraWinBarcode 到 BarcodeWriter

WinForms 的生成模式可順利地映射到IronBarcode的 BarcodeWriter

之前(Infragistics WinForms):

using Infragistics.Win.UltraWinBarcode;

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

之後(IronBarcode):

// NuGet: dotnet add package IronBarcode
using IronBarCode;

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

Infragistics 的 Symbology 枚舉值移動到 BarcodeEncoding 枚舉,這是 CreateBarcode() 的參數,而非屬性賦值。 資料成為第一個參數。 SaveTo() 變成 .SaveAsSvg().SaveAsPdf(),視您的輸出格式而定。

如果您需要在保存之前調整條碼的大小:

using IronBarCode;

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

WPF 事件驅動的閱讀:Service Class 到兩行

這是在遷移中的最大減少。 Infragistics WPF 的閱讀模式需要完整的服務類:

之前(Infragistics WPF — 約35行):

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

之後(IronBarcode — 2 行):

using IronBarCode;

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

整個服務類──實例管理、事件布線、BitmapImage 載入、Dispose()──都已移除。 BarcodeReader.Read() 是同步的、靜態的,並直接接受文件路徑字串。

如果您還需要返回符號型別:

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.Valueresult.Format 取代 e.Symbology

新增 WinForms 閱讀(以前不可能)

如果您是在僅有生成功能的 WinForms 項目中,閱讀功能現已可以使用同一套件進行:

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

不需要額外的套件,不需要框架特定的設置。相同的 BarcodeReader.Read() 呼叫在 WinForms 和 WPF 中皆可使用。

ASP.NET Core端點(以前不可能)

在 ASP.NET Core控制器中進行條碼生成和閱讀,Infragistics 包是不可能的。 使用 IronBarcode:

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() 直接接受 Stream──無需先將上傳保存到磁碟。

PDF 條碼閱讀

IronBarcode 可以從 PDF 文件中原生讀取條碼──無需額外的套件:

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 沒有相應功能──PDF 條碼閱讀需要將 PDF 頁面外部轉換為圖像後再掃描。

批量處理:從順序到並行

之前(Infragistics — 順序的,並行化不安全):

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

之後(IronBarcode — 並行的,執行緒安全):

using IronBarCode;

// Option 1: pass an array directly —IronBarcodehandles 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 模式

如果您的程式碼在 Infragistics BarcodeReader 周圍實現了 IDisposable,這些可以完全移除。IronBarcode的 BarcodeReader 是一個靜態類。 沒有實例要建立,沒有事件處理器要分離,也沒有 Dispose() 要調用。

// 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 目的提供的薄服務包裝器簡單直接:

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

無需構造函式注入,無需 Dispose(),無需事件管理。

常見遷移問題

移除 SymbologyType 標誌

Infragistics 的 WPF 讀取器上的 SymbologyTypes 屬性要求您列出您想支持的每個條碼格式。IronBarcode沒有對應物——它會自動檢測每次閱讀時支持的所有 50+ 種格式。

這帶來了一個重要的副作用:如果之前某一特定條碼格式因其 SymbologyType 標誌從列表中消失而默默失敗,IronBarcode 現在將找到它。 您可能會看到以前未曾出現過的條碼值出現在生產環境中。 這是正確的行為——那些條碼一直都在。

如果您需要限制返回的格式(出於性能或模糊原因),BarcodeReaderOptions 支持這個功能:

using IronBarCode;

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

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

不需要載入 BitmapImage

Infragistics 的 WPF 閱讀器需要通過 new BitmapImage(new Uri(path, UriKind.Absolute)) 載入圖片為 BitmapSource 物件。IronBarcode可以直接接受文件路徑字串、字節陣列和流:

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

您可以移除任何僅用於條碼相關圖像載入的 using System.Windows.Media.Imaging; 引入。

移除 TaskCompletionSource 模式

橋接事件驅動的 DecodeComplete 回調到非同步程式碼的 TaskCompletionSource<string> 字段已經被完全移除。 BarcodeReader.Read() 是同步的,可以直接返回結果。

如果您的調用程式碼是 await service.ReadBarcodeAsync(path),您可以簡化為:

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

// After
var value = BarcodeReader.Read(imagePath).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";
    });
}

屬性名稱更改

InfragisticsIronBarcode
e.Value(在 ReaderDecodeArgs 中)result.Value
e.Symbology(在 ReaderDecodeArgs 中)result.Format
barcode.DataBarcodeWriter.CreateBarcode() 的第一個參數
barcode.Symbology = Symbology.Code128BarcodeEncoding.Code128(參數)
barcode.SaveTo(path).SaveAsPng(path) / .SaveAsJpeg(path) / .SaveAsSvg(path)

遷移檢查清單

使用這些 grep 樣式檢查您程式碼庫中所有 Infragistics 條碼的使用情況:

# 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

處理每一個匹配:

  • UltraWinBarcode 使用情況:替換為 BarcodeWriter.CreateBarcode()
  • new BarcodeReader() + DecodeComplete 塊:替換為 BarcodeReader.Read()
  • SymbologyType 標誌列表:完全刪除
  • 用於條碼輸入的 BitmapImage 載入:替換為直接路徑/流/字節
  • ReaderDecodeArgs e 回調正文:提取 e.Valuee.Symbologyresult.Format
  • 條碼服務類上的 IDisposable:如果唯一的可刪除資源是 _reader,則移除

功能比較

功能Infragistics BarcodeIronBarcode
WinForms 條碼生成是(UltraWinBarcode)
WinForms 條碼閱讀不提供
WPF 條碼生成是(XamBarcode)
WPF 條碼閱讀是(事件驅動)是(同步)
ASP.NET Core不提供
控制台 / 工作者服務不提供
Docker / Linux不提供
Azure 功能不提供
Blazor 伺服器不提供
自動格式檢測否——需要 SymbologyType 標誌
PDF 條碼讀取不提供是(原生)
支持執行緒安全並行閱讀
批量閱讀(內建)
QR 錯誤校正控制不提供
靜態 API(無實例)
需要 Suite 訂閱是(Infragistics Ultimate,每年2,399美元起)
永久許可是——從 749 美元開始

遷移後的主要優勢

WinForms 的條碼閱讀。 如果遷移是由 WinForms 閱讀需求驅動的,這就是主要結果:BarcodeReader.Read(imagePath) 能夠在 WinForms 中編譯和運行,無需額外的設置。

ASP.NET Core 和控制台支持。 Web API、背景服務和控制台工具現在都可以使用同一個套件生成和閱讀條碼。 如果您為這些項目型別維護了單獨的工具鏈或解決方案,這些都已消失。

無事件處理器樣板。 DecodeComplete 處理器、TaskCompletionSource 桥接器、BitmapImage 載入和 Dispose() 清理都被移除。 剩下的就是條碼邏輯。

無符號規範。 由於缺少 SymbologyType 標誌而靜默失敗的格式現在將被正確檢測到。 自動檢測涵蓋所有50多種格式,無需配置。

所有項目型別都使用同一服務類。 一個使用 BarcodeReader.Read()BarcodeWriter.CreateBarcode() 的單一 BarcodeService 包裝器可以在 WinForms、WPF、ASP.NET Core 和解決方案中的任何其他項目中共享。 無框架特定的實現。

不需要單獨的 Infragistics Ultimate 訂閱僅用於條碼功能。 如果條碼支持是您項目擁有 Infragistics Ultimate 訂閱的唯一原因,或是一個重要因素,IronBarcode 是一個獨立的套件,提供從 749 美元起的永久授權選項,適用於單一開發者。

一旦您找到了所有 Infragistics 條碼的使用情況,遷移本身便頗為機械化。 最複雜的部分是 WPF 服務類的替換,即便如此也只是移除類和用 BarcodeReader.Read() 替換調用而已。 生成的遷移是一對一的屬性/方法重命名。 您得到的是一個單一、一致的 API,在您需要的每種項目型別中都能運行。

請注意: Infragistics 是其相應所有者的註冊商標。 本網站與 Infragistics 無關,未經其認可或贊助。 所有產品名稱、標誌和品牌均為其各自所有者的財產。 比較僅供資訊參考,並反映了撰寫時公開可用的資訊。
Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

...
閱讀更多

相關文章

Key in blue circle

立即免費取得 30 天試用金鑰

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
預訂您的免費即時演示
Booking Badge

全球數百萬工程師信賴

Iron Software的客戶標誌
獲取您的無義務諮詢
完成下方表單或發送電子郵件至sales@ironsoftware.com
您的詳細資訊將始終保密。
全球數百萬工程師信賴
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立