IRONSOFTWAREHOME
他のコンポーネントと比較する

インフラジスティクス バーコード vs IronBarcode: WPF専用リーダー対プラットフォームに依存しないAPI

Curtis Chau
Curtis Chau
Updated: 2026年5月19日

Infragisticsのバーコード読み取り機能はWPFで動作します。 そこに到達するには、BarcodeReader インスタンス、DecodeComplete イベントハンドラ、コールバックを非同期コードにブリッジする TaskCompletionSource<string> 、URIからの BitmapImage のロード、サポートしたい各 Symbology ファミリーのビット単位ORが必要です。それは Decode() への2つ目の引数として渡されます。 ファミリーを省くと—例えば、Symbology.QRCode をフラグから外す—画像内のQRバーコードは静かに何も返しません。 例外なし。 警告なし。 何も結果が表示されませんでした。

これはWPF側です。WinForms側では、Infragistics.Win.UltraWinBarcode パッケージは生成コントロールを含みますが、読み取りクラスは全く含まれていません。 WinFormsプロジェクトでバーコードを読み取る必要がある場合、Infragisticsバーコードパッケージには呼び出せる関数はありません。 これは、 ASP.NET Coreコントローラー、コンソールツール、Azure Functions、 Blazorサーバー コンポーネント、または Docker コンテナにも同様に当てはまります。 InfragisticsのバーコードサポートはUIフレームワークの境界内に存在します。WPFでは、生成とイベント駆動型の読み取りが実現されます。 WinFormsは生成機能のみを取得します。 それ以外のものには何も与えられない。

この比較では、その分割が実際には何を意味するのかを検証し、次にIronBarcodeがすべてのプロジェクトタイプで同じように動作する単一の静的APIを使用して同じ作業をどのように処理するかを見ていきます。

Infragisticsのバーコードサポートについて

Infragisticsは、最も実績のある.NET UIコンポーネントベンダーの1つです。 バーコード機能を提供するInfragistics UltimateSuite(サブスクリプション)には、WinForms、WPF、 ASP.NET、 Blazor、モバイル向けの数百ものコントロールが含まれています。Infragisticsのグリッド、チャート、スケジューラーを既に利用しているチームにとって、バーコードコントロールは論理的な追加機能です。なぜなら、既にサブスクリプション料金を支払っているからです。

しかし、バーコードのサポートは統一されたライブラリではありません。 これらは、それぞれ異なる機能を持ち、部分的にしか重複しない2つの独立したアセンブリである。

WinForms:ウルトラウィン・バーコード

Infragistics.Win.UltraWinBarcode パッケージは、UltraWinBarcode クラスを通じてWinFormsアプリケーションでのバーコード生成を提供します。 APIはシンプルです。

// InfragisticsWinFormsgeneration
using Infragistics.Win.UltraWinBarcode;

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

シンボロジーを設定し、データを割り当て、SaveTo() を呼び出します。 WinFormsにおける生成のみのシナリオでは、これは機能します。 Symbology 列挙型には、Code128、Code39、QR、EAN13、その他の一般的なフォーマットが含まれます。

このアセンブリには、リーダーが存在しない。 UltraBarcodeReader クラスは存在しません。 Scan() メソッドは存在しません。 WinFormsアプリケーションで Infragistics.Win.UltraWinBarcode パッケージのみを使用してバーコード画像を読もうとすると、呼び出すものは何もありません。

WPF: XamBarcodeとBarcodeReader

WPF側には、生成コントロール (XamBarcode) と別のリーダークラス (BarcodeReader イン Infragistics.WPF.BarcodeReader アセンブリから) の両方が含まれています。 このリーダーはイベント駆動型であり、WPFのスレッド処理およびイメージングモデルに基づいて設計されています。

WPFでバーコードを読むには、DecodeComplete イベントを配線し、画像をファイルパスではなく BitmapSource オブジェクトとしてロードし、コードが非同期の場合、コールバックパターンを待機可能なものに変換する必要があります。

ASP.NET Core、コンソール、Docker: なし

WPFやWinForms UIアセンブリなしで net8.0 を対象とするInfragisticsバーコードパッケージは存在しません。 ASP.NET Coreプロジェクト、コンソールツール、Azure Functions、 Blazor Server、およびLinux Dockerコンテナには、Infragisticsバーコードオプションがありません。 このライブラリはUIフレームワークと連携しています。

WPFの読み方パターン

Infragisticsを使用したWPFでバーコードを読み取ると、実際には次のような画面になります。

// 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;
    }
}
C#

これは、1つのバーコードを読み取るために約35本のインフララインが必要になることを意味します。 実際に何が起こっているのかを数えてみましょう。

  1. BarcodeReader インスタンスが作成され、フィールドとして生存します。
  2. コンストラクタにイベントハンドラが組み込まれています。
  3. ReadBarcodeAsync へのすべての呼び出しは、共有フィールドに割り当てられる新しい TaskCompletionSource<string> を作成します — つまり、このサービスは書かれたままではスレッドセーフではありません。 同時呼び出しは _result を上書きします。
  4. 画像は、ファイルパスの文字列でもバイト配列でもストリームでもなく、BitmapImage として Uri からロードする必要があります。
  5. DecodeAsync() はイベントを非同期に発火します。 TaskCompletionSource はコールバックの世界と非同期/待機の世界を結びつける接着剤です。
  6. コールバックは e.SymbolFound が真であるときに e.Value を抽出します。
  7. Dispose() メソッドは、メモリリークを防ぐためにイベントハンドラをデタッチする必要があります。

この論理はどれもバーコードとは関係ありません。 これは、イベント駆動型設計に対応するために必要なインフラストラクチャです。 本番コードでは、_result.Task が完了しない場合に備えて、タイムアウト、キャンセレーショントークン、またはイベントが発火しないことを防ぐ何かを処理する必要があります。

WinFormsのギャップ

WinFormsの性能差は、一見したところよりもずっと顕著だ。 WinFormsアプリケーションを開発するチームは、Infragisticsのバーコードページにアクセスした際、両方のUIフレームワークでバーコードの生成と読み取りが対称的に行えることを期待することが多い。 彼らが見つけたのは、Infragistics.Win.UltraWinBarcode が全く読み取り機能を提供しないということです。

これは文書上の見落としではありません。 WinFormsのバーコードアセンブリは、生成制御として設計されました。 WinFormsアプリケーションでバーコードをスキャンする必要がある場合(例えば、ユーザーがアップロードした画像ファイルからバーコードを読み取ったり、カメラ映像からバーコードをデコードしたりする場合)、Infragisticsのバーコードツールでは実行できません。 そうなると、全く別のライブラリを導入する必要が生じ、Infragisticsを生成ツールとして使用する根拠が弱まることになる。

この非対称性により、混合フレームワークプロジェクトを運営するチームにカバレッジギャップが生じます。 WPFデスクトップクライアントとWinFormsデスクトップクライアントの両方を使用しているチームは、他のすべての場所でInfragisticsを使用している場合でも、WinFormsプロジェクトではInfragisticsを使用してバーコードを読み取ることはできません。

シンボル仕様:サイレント障害モード

WPFリーダーでの Decode() への Symbology フラグ引数は、失敗モードがサイレントであるため、その独自のセクションに値します。欠落しているフラグは、エラーなしで空の結果を返します。

リーダーにコールするときは、検索したいすべてのバーコードファミリーをOR演算子で結合します。 サポートされているファミリーは、QR、EAN/UPC (EanUpc)、Code 39 (Code39Ext)、Code 128、MaxiCode、Interleaved 2 of 5です — DataMatrixは列挙型には全く含まれていないので、WPFリーダーではデコードできません。 Symbology.All は列挙型のすべてをカバーします:

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

バーコード画像がQRコードを含んでいても、フラグに Symbology.QRCode が含まれていない場合、e.SymbolFound は偽となり、e.Value は空です。 デコードイベントは引き続き発生します。 例外は発生しません。 発信者は"バーコードが見つかりません"というメッセージを受け取りますが、画像が読み取れなかったのか、単に設定されていなかったのかは分かりません。

実際には、これは次のことを意味します。 開発者がテストしたフォーマットでは、初期設定は問題なく動作します。

  • 新しいバーコード形式がシステムに導入される(サプライヤーがラベルの種類を変更したり、新しい製品ラインで異なるシンボル体系が使用される場合など)。
  • リーダーは、そのファミリーの画像すべてに対してサイレントに失敗します。
  • このエラーは、"フォーマットが設定されていません"ではなく、"画像にバーコードがありません"というエラーと全く同じように見えます。

これをデバッグするチームは、フラグリストにファミリーが存在しないことに気付くまで、画像品質の確認に時間を費やします。特にDataMatrixは、追加するフラグがないため、WPFリーダーが全くサポートしていない尖ったケースです。

IronBarcodeはフォーマット引数を必要としません。 読取りごとにサポートされているすべてのフォーマットを自動検出します。 忘れるべき旗など存在しない。

プラットフォームマトリックス

プラットフォーム間の機能格差を理解することが、アーキテクチャ上の制約を理解する最も明確な方法である。

プラットフォームインフラジスティクス・ジェネレーションインフラジスティクス読解IronBarcode生成IronBarcodeの読み取り
WPFXamBarcodeコントロールバーコードリーダー(イベント駆動型)はいはい
WinFormsウルトラウィンバーコード利用不可はいはい
.NET Core利用不可利用不可はいはい
コンソール利用不可利用不可はいはい
Blazorサーバー利用不可利用不可はいはい
Docker / Linux利用不可利用不可はいはい
Azure Functions利用不可利用不可はいはい

この表は、純粋なWPFデスクトップアプリケーション以外のアプリケーションを実行しているチームが、Infragisticsのバーコードサポートでは不十分だと感じる理由を示しています。 プロジェクトがWinFormsとASP.NET Core 、あるいはWPFとバックグラウンドワーカーサービスにまたがる場合、Infragisticsのバーコードライブラリはコードベースの一部しかカバーしません。

IronBarcodeを理解する

IronBarcodeは、WinForms、WPF、またはUIフレームワークに依存しない、 .NET専用のバーコードライブラリです。 同じNuGetパッケージ、同じ名前空間、同じ API は、WinForms、WPF、 ASP.NET Core、コンソール、 Blazor Server、Docker、Azure Functions、AWS Lambda など、あらゆる.NETプロジェクトで動作します。

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

BarcodeReader.Read() は静的メソッドです。 管理するインスタンスもなく、配線するイベントもなく、コールバックパターンをブリッジする TaskCompletionSource もありません。 ファイルパス文字列、バイト配列、Stream、またはそのいずれかのバッチ処理用の配列を受け入れます。

生成用には、BarcodeWriter.CreateBarcode() はPNG、JPEG、SVGに保存することができるバーコードオブジェクトを返すか、バイナリデータとして取得することができます:

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

ライセンスの初期化は、アプリケーションの起動時に一度だけ行われます。

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

並列表示:バッチ処理

バッチ処理は、Infragistics WPFリーダーにおける別の構造的な制約を露呈する。 リーダーが共有イベントハンドラを使用し、すべての呼び出しで _result フィールドが上書きされるため、上記のサービスクラスは複数の画像を同時に安全に処理することができません。 呼び出しは順番に行う必要があります。

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

これを同時に行うには、以前のデコードがまだ進行中の間に _result が上書きされないようにするためのロック、キュー、またはセマフォなど、大幅な追加インフラストラクチャが必要です。 これは、本来単純な入出力操作であるはずなのに、決して軽視できない並行処理の問題である。

IronBarcodeの静的 BarcodeReader.Read() はスレッドセーフです。 追加の同期処理なしに、複数のスレッドから同時に呼び出すことができます。 バッチワークロードの場合、Parallel.ForEach を直接利用できます:

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

また、1回の呼び出しで複数のファイルを渡し、BarcodeReaderOptions によって並行処理を設定できます:

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

機能比較

フィーチャーインフラジスティクス バーコードIronBarcode
WinFormsでのバーコード読み取り不可はい
WPFバーコード読み取りはい(イベント駆動型)はい(同期)
.NET Coreのサポート不可はい
コンソール/ワーカーサービス不可はい
Docker / Linux不可はい
Azure Functions不可はい
Blazorサーバー不可はい
自動フォーマット検出いいえ — SymbologyフラグをDecode()に渡す必要がありますはい — フォーマットは自動検出されます
PDFバーコード読み取り不可はい、ネイティブで追加パッケージは不要です。
スレッドセーフな読書いいえ(共有イベントハンドラ)はい(静的API)
イベント駆動型APIが必要はい(WPF)なし
明示的な画像読み込み(BitmapSource)はいいいえ — ファイルパス、バイト、ストリームを受け入れます
同時読書いいえ(TaskCompletionSource を介してブリッジする必要があります)はい
バッチ処理逐次処理のみ(並行処理は安全ではありません)組み込みの並列処理
サイレントフォーマットエラーはい(省略されたSymbologyファミリー)なし
Suiteの依存関係が必要ですはい — Infragistics Ultimate サブスクリプションいいえ — 単体パッケージ
永久ライセンスオプションいいえ - 年間購読はい
おおよそのライセンス費用年間サブスクリプション(Infragistics Ultimate)749ドルから(Lite、永久ライセンス)

APIマッピングリファレンス

###WinForms(UltraWinBarcode) からIronBarcodeへ

InfragisticsWinForms- UltraWinBarcodeIronBarcode
new UltraWinBarcode()BarcodeWriter.CreateBarcode(data, encoding)
barcode.Symbology = Symbology.Code128BarcodeEncoding.Code128 ( CreateBarcode のパラメータ)
barcode.Data = "ITEM-12345"CreateBarcode() の第一引数
barcode.SaveTo(outputPath).SaveAsPng(outputPath)
読み取りAPIは存在しませんBarcodeReader.Read(imagePath)

###WPF(BarcodeReader) からIronBarcodeへ

InfragisticsWPF— バーコードリーダーIronBarcode
new BarcodeReader()静的クラス - インスタンスは不要
_reader.DecodeComplete += OnDecodeComplete不要
_reader.DecodeAsync(bitmap, Symbology.X |Symbology.Y)自動検出 - 設定不要
new BitmapImage(new Uri(path)) + _reader.Decode(bitmap, ...)BarcodeReader.Read(path)
e.Value ( ReaderDecodeArgs に)result.Value
e.Symbology ( ReaderDecodeArgs に)result.Format
TaskCompletionSource<string> 非同期ラッパー同期処理 - ラッパー不要
Dispose() — イベントハンドラをデタッチします不要 — インスタンスまたはイベントなし
WPFプロジェクトのみあらゆる.NETプロジェクトタイプ

チームが切り替わるとき

いくつかの特定の状況が、一貫してチームをInfragisticsのバーコードサポートから遠ざけている。

**WinFormsでは、読解力が必要です。**これは最も一般的なシナリオです。 WinFormsアプリケーションは UltraWinBarcode でバーコードを正常に生成しますが、新しい要件が到着します: アップロードされた画像からバーコードをスキャンしたり、印刷前にラベルを検証したりする必要があります。 InfragisticsにはWinForms用の読み取りAPIはありません。 チームは別のライブラリを取り込むか、両方の機能を備えた生成コードを置き換えるかのどちらかを選択する。

新しいASP.NET Coreエンドポイント。Infragisticsのバーコード生成機能を搭載したデスクトップアプリケーションに、専用のWeb APIが追加されました。 エンドポイントは、画像のアップロードを受け付けてバーコード値を返すか、必要に応じてバーコード画像を生成する必要があります。 ASP.NET CoreプロジェクトでInfragisticsのバーコードパッケージを使用する場合、どちらも不可能です。 IronBarcodeは dotnet add package BarCode でインストールされ、コンソールメソッドと同じ方法でコントローラーアクションで動作します。

Dockerデプロイメント。WPFアプリケーションがコンテナ化されるか、そのバーコードロジックがマイクロサービスに抽出されます。WPFアセンブリはLinux Dockerコンテナ内では実行されません。 InfragisticsWPFBarcodeReader が彼らについていきます。 IronBarcodeはLinux x64をネイティブターゲットとしています。

**バッチ処理のパフォーマンス。**ワークフローは、数百または数千のバーコード画像を処理します。 イベント駆動型のInfragisticsリーダーは、それらを順次処理します。 IronBarcodeの静的リーダーはスレッドセーフで、 Parallel.ForEach または組み込みの MaxParallelThreads オプションを使用することができ、同時実行インフラストラクチャは不要です。

本番での静かなフォーマットの失敗。 チームは、特定のファミリーのバーコードが数週間にわたり静かに失敗していたことを発見しました。これは、Symbology フラグが Decode() に渡されるときにそのファミリーが含まれていなかったためです。 自動検出に切り替えることで、この故障モードは完全に解消されます。

**Infragisticsのサブスクリプション範囲を縮小する。**一部のチームは、バーコード制御機能が含まれているという理由だけで、Infragistics Ultimateのサブスクリプション料金を支払っている。 バーコードが必要なことだけが契約の理由である場合、はるかに低コストで利用できる専用のバーコードライブラリを検討する価値がある。

結論

Infragisticsのバーコードサポートにおける中心的な問題は、機能面ではなく、アーキテクチャ面にある。WPFBarcodeReader はバーコードを読み取ります。WinFormsUltraWinBarcode はそれらを生成します。 各コンポーネントは、それぞれ設計された狭い範囲内においてのみ機能します。 問題は、これら2つのコンテキストでは、ほとんど for .NETチームが実際に必要としているものを網羅できないという点です。

現代 for .NETアプリケーションにおけるバーコード機能は、単一のUIフレームワーク内に存在することは稀である。 これはWinFormsクライアントとWeb APIに登場します。 これはDockerコンテナとデスクトップ上で動作します。ASP.NETエンドポイントにASP.NETされた画像をスキャンし、コンソールツールからラベルを印刷する必要があります。 これらの方法はどれもInfragisticsのバーコードパッケージでは機能せず、WPFリーダーのイベント駆動型パターンと必須シンボルフラグは、機能する唯一の状況においても、著しい複雑さを増す。

IronBarcodeは、バーコードの読み取りと生成という同じ問題を、あらゆる.NETプロジェクトタイプで同じようにコンパイルおよび実行される静的APIによって解決します。 WPFサービスクラスで書いた BarcodeReader.Read() コールは、ASP.NET Coreコントローラーで書いたものと同じであり、Linux Dockerコンテナで書いたものとも同じです。 イベントもフラグも TaskCompletionSource もありません。 バーコードのロジックは35行ではなく2行で構成されており、その2行はどこでも機能します。

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日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。