IRONSOFTWAREHOME
ビデオ

インフラジスティクス バーコード から 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バーコードパッケージを削除する

プロジェクトから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:ライセンスを初期化する

アプリケーション開始時に1回だけライセンスの初期化を追加します—App.xaml.cs、またはDI構成ルート:

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イベント駆動型読み取り:サービスクラスから2行への変換

これは移民数の減少において最も顕著な例である。 インフラジスティクス 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";

サービスクラス全体—インスタンス管理、イベントワイヤリング、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.Valuee.Value に取って代わります。 result.Formate.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エンドポイント(従来は不可能だった)

Infragisticsのパッケージでは、 ASP.NET Coreコントローラーでのバーコードの生成と読み取りは不可能でした。 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 — 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;
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);
});

廃棄パターンの削除

コードにInfragisticsの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()なし、イベント管理なし。

よくある移行の問題

シンボルタイプフラグが削除されました

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

ビットマップ画像の読み込みは不要です

Infragistics WPFリーダーは画像をnew BitmapImage(new Uri(path, UriKind.Absolute))経由でロードする必要がありました。 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 パターンが削除されました

イベントドリブンの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";
    });
}

物件名の変更

インフラジスティクスIronBarcode
ReaderDecodeArgs内)result.Value
ReaderDecodeArgs内)result.Format
barcode.DataBarcodeWriter.CreateBarcode()の最初の引数
barcode.Symbology = Symbology.Code128BarcodeEncoding.Code128(パラメーター)
barcode.SaveTo(path).SaveAsPng(path) / .SaveAsJpeg(path) / .SaveAsSvg(path)

移行チェックリスト

コードベース内のInfragisticsバーコードの使用箇所をすべて検索するには、以下のgrepパターンを使用してください。

# 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

各試合を順に進めてください。

  • BarcodeWriter.CreateBarcode()に置き換えます
  • new BarcodeReader() + BarcodeReader.Read()に置き換えます
  • SymbologyTypeフラグリスト:完全に削除します
  • バーコード入力に使用されたBitmapImageロード:直接パス/ストリーム/バイトに置き換えます
  • e.Valuee.Symbologyresult.Formatに抽出します バーコードサービスクラスの_readerであった場合は削除します

機能比較

フィーチャーインフラジスティクス バーコードIronBarcode
WinFormsによるバーコード生成はい(UltraWinBarcode)はい
WinFormsでのバーコード読み取り不可はい
WPFバーコード生成はい(XamBarcode)はい
WPFバーコード読み取りはい(イベント駆動型)はい(同期)
.NET Core不可はい
コンソール/ワーカーサービス不可はい
Docker / Linux不可はい
Azure Functions不可はい
Blazorサーバー不可はい
自動フォーマット検出いいえ — SymbologyType フラグは必須ですはい
PDFバーコード読み取り不可はい(ネイティブ)
スレッドセーフな同時読み取りなしはい
バッチ読み込み(内蔵)なしはい
QRコードエラー訂正制御不可はい
静的API(インスタンスなし)なしはい
Suiteのサブスクリプションが必要ですはい (Infragistics Ultimate, $2,399+/年)なし
永久ライセンスなしはい、749ドルから

移行後の主なメリット

WinFormsでのバーコード読み取り。 WinFormsの読み取り要件に基づくマイグレーションが実行された場合、これは主な結果です:BarcodeReader.Read(imagePath) は追加設定なしにWinFormsでコンパイルおよび実行されます。

ASP.NET Coreとコンソールをサポート。Web API、バックグラウンドサービス、コンソールツールは、同じパッケージを使用してバーコードの生成と読み取りの両方を実行できるようになりました。 これらのプロジェクトタイプごとに個別のツールチェーンや回避策を維持していた場合、それらは不要になります。

イベントハンドラの定型化不要。 Dispose()クリーンアップはすべて削除されます。 残るのはバーコードのロジックだけだ。

シンボロジーの仕様なし。 SymbologyTypeフラグの欠如による静かな失敗を引き起こしていた形式は、今後正しく検出されます。 自動検出機能により、設定不要で50種類以上のフォーマットに対応します。

すべてのプロジェクトタイプで同じサービスクラス。 単一のBarcodeWriter.CreateBarcode()を使用しており、これはWinForms、WPF、ASP.NET Core、およびソリューション内の他のすべてのプロジェクト間で共有できます。 フレームワーク固有の実装はありません。

**バーコード機能のみを利用する場合、Infragistics Ultimateのサブスクリプションは不要です。**プロジェクトでInfragistics Ultimateのサブスクリプションを契約した唯一の理由がバーコードサポートだった場合、またはそれが契約の重要な要因だった場合は、 IronBarcodeは単体パッケージとして提供されており、開発者1名あたり749ドルから利用できる永久ライセンスオプションが用意されています。

Infragisticsのバーコードの使用箇所をすべて特定できれば、移行作業自体は機械的に行えます。 最も関与している部分は、WPFサービスクラスの置き換えであり、それでもクラスを削除し、呼び出しをBarcodeReader.Read()に置き換えることに帰着します。 世代移行とは、プロパティ/メソッド名を1対1で変更することです。 得られるのは、必要なあらゆるプロジェクトタイプで動作する、一貫性のある単一のAPIです。

ご注意: Infragisticsはその所有者の登録商標です。 このサイトは、Infragisticsとは関連付けられておらず、支持されたものでもスポンサー提供されたものでもありません。 すべての製品名、ロゴ、およびブランドは各所有者の所有物です。 比較は情報提供のみを目的としており、執筆時点で公開されている情報を反映しています。
Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、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

世界中の数百万人のエンジニアから信頼されています。

ライセンスはより安く
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。