Infragistics BarcodeとIronBarcodeの比較:C#バーコードライブラリの比較
Infragisticsのバーコード読み取り機能はWPFで動作します。 そのためには、BarcodeReaderインスタンス、DecodeCompleteイベントハンドラ、コールバックを非同期コードにブリッジするTaskCompletionSource<string>、URIからのBitmapImageロード、サポートしたいすべての@@--CODE-38754--@の明示的なビットごとのORが必要です。 たとえば、SymbologyType.EAN8といったフラグを1つでも見逃すと、画像内のEAN-8バーコードは何も返しません。 例外なし。 警告なし。 何も結果が表示されませんでした。
これが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:ウルトラウィン・バーコード
CODE-38757--@@パッケージは、UltraWinBarcodeクラスを通して、WinFormsアプリケーションでのバーコード生成を提供します。 APIはシンプルです。
// InfragisticsWinFormsgeneration
using Infragistics.Win.UltraWinBarcode;
var barcode = new UltraWinBarcode();
barcode.Symbology = Symbology.Code128;
barcode.Data = "ITEM-12345";
barcode.SaveTo(outputPath);
// InfragisticsWinFormsgeneration
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)
シンボロジーを設定し、データを割り当て、SaveTo()を呼び出します。 WinFormsにおける生成のみのシナリオでは、これは機能します。 CODE-38760は、一般的なフォーマットをカバーしています:Code128、Code39、QR、EAN13などです。
このアセンブリには、リーダーが存在しない。 CODE-38761はありません。 CODE-38762--@@@ メソッドはありません。 WinFormsアプリケーションでInfragistics.Win.UltraWinBarcodeパッケージだけを使用してBarCode画像を読み取ろうとすると、呼び出すものがありません。
WPF: XamBarcodeとBarcodeReader
WPF側には、生成コントロール(@--CODE-38764--@@)と個別のリーダークラス(@--CODE-387767--@@アセンブリの@@--CODE-38765--@)の両方が含まれています。 このリーダーはイベント駆動型であり、WPFのスレッド処理およびイメージングモデルに基づいて設計されています。
WPFでバーコードを読み取るには、DecodeComplete@イベントを配線し、画像をファイルパスではなくBitmapSource@オブジェクトとして読み込み、コードが非同期の場合はコールバックパターンを待機可能なものに変換する必要があります。
ASP.NET Core、コンソール、Docker: なし
WPF またはWinFormsUI アセンブリがない場合は、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));
// Must specify EVERY format — no auto-detection
_reader.SymbologyTypes = SymbologyType.Code128 |
SymbologyType.Code39 |
SymbologyType.QR |
SymbologyType.EAN8 |
SymbologyType.EAN13 |
SymbologyType.UPCA |
SymbologyType.DataMatrix |
SymbologyType.Interleaved2of5;
// Trigger decode — result comes via callback
_reader.Decode(bitmap);
return await _result.Task;
}
private void OnDecodeComplete(object sender, ReaderDecodeArgs e)
{
_result?.TrySetResult(e.SymbologyValue ?? "No barcode found");
}
public void Dispose()
{
if (_reader != null)
{
_reader.DecodeComplete -= OnDecodeComplete;
_reader = null;
}
}
// 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));
// Must specify EVERY format — no auto-detection
_reader.SymbologyTypes = SymbologyType.Code128 |
SymbologyType.Code39 |
SymbologyType.QR |
SymbologyType.EAN8 |
SymbologyType.EAN13 |
SymbologyType.UPCA |
SymbologyType.DataMatrix |
SymbologyType.Interleaved2of5;
// Trigger decode — result comes via callback
_reader.Decode(bitmap);
return await _result.Task;
}
private void OnDecodeComplete(object sender, ReaderDecodeArgs e)
{
_result?.TrySetResult(e.SymbologyValue ?? "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)()
' Load as WPF BitmapSource — not a file path
Dim bitmap As New BitmapImage(New Uri(imagePath, UriKind.Absolute))
' Must specify EVERY format — no auto-detection
_reader.SymbologyTypes = SymbologyType.Code128 Or
SymbologyType.Code39 Or
SymbologyType.QR Or
SymbologyType.EAN8 Or
SymbologyType.EAN13 Or
SymbologyType.UPCA Or
SymbologyType.DataMatrix Or
SymbologyType.Interleaved2of5
' Trigger decode — result comes via callback
_reader.Decode(bitmap)
Return Await _result.Task
End Function
Private Sub OnDecodeComplete(sender As Object, e As ReaderDecodeArgs)
_result?.TrySetResult(If(e.SymbologyValue, "No barcode found"))
End Sub
Public Sub Dispose()
If _reader IsNot Nothing Then
RemoveHandler _reader.DecodeComplete, AddressOf OnDecodeComplete
_reader = Nothing
End If
End Sub
これは、1つのバーコードを読み取るために約35本のインフララインが必要になることを意味します。 実際に何が起こっているのかを数えてみましょう。
1.CODE-38771--@@@ インスタンスが作成され、フィールドとして保持されます。
- コンストラクタにイベントハンドラが組み込まれています。
3.CODE-38772--@@を呼び出すたびに、共有フィールドに割り当てられた新しい
TaskCompletionSource<string>が作成されます。 同時に呼び出すと、_resultが上書きされます。 4.画像は、ファイルパス文字列でもバイト配列でもストリームでもなく、BitmapImage@からUri@として読み込まれなければなりません。 5.CODE-38777は、非同期にイベントを発生させます。 CODE-38778は、コールバックの世界とasync/awaitの世界の接着剤です。 6.コールバックは、e.SymbologyValueを抽出します。 7.CODE-38780--@@メソッドは、メモリリークを防ぐためにイベントハンドラをデタッチしなければなりません。
この論理はどれもバーコードとは関係ありません。 これは、イベント駆動型設計に対応するために必要なインフラストラクチャです。 本番コードでは、_result.Task@が完了しない場合(タイムアウト、キャンセル・トークン、イベントが発生しないようにする何らかのガードなど)を処理する必要もあります。
WinFormsのギャップ
WinFormsの性能差は、一見したところよりもずっと顕著だ。 WinFormsアプリケーションを開発するチームは、Infragisticsのバーコードページにアクセスした際、両方のUIフレームワークでバーコードの生成と読み取りが対称的に行えることを期待することが多い。 彼らが見つけたのは、Infragistics.Win.UltraWinBarcodeがまったく読めないということでした。
これは文書上の見落としではありません。 WinFormsのバーコードアセンブリは、生成制御として設計されました。 WinFormsアプリケーションでバーコードをスキャンする必要がある場合(例えば、ユーザーがアップロードした画像ファイルからバーコードを読み取ったり、カメラ映像からバーコードをデコードしたりする場合)、Infragisticsのバーコードツールでは実行できません。 そうなると、全く別のライブラリを導入する必要が生じ、Infragisticsを生成ツールとして使用する根拠が弱まることになる。
この非対称性は、複数のフレームワークを組み合わせたプロジェクトを運営するチームにとって、非常に厄介な状況を生み出す。 WPFデスクトップクライアントとWinFormsデスクトップクライアントの両方を使用しているチームは、他のすべての場所でInfragisticsを使用している場合でも、WinFormsプロジェクトではInfragisticsを使用してバーコードを読み取ることはできません。
シンボル仕様:サイレント障害モード
WPFリーダーのSymbologyTypesフラグ・プロパティは、その故障モードが微妙で、実運用では危険なので、独自のセクションに値する。
リーダーを設定する際には、サポートしたいすべてのバーコード形式を明示的にOR条件で組み合わせる必要があります。
// Must enumerate every format — miss one, that format silently returns empty
_reader.SymbologyTypes = SymbologyType.Code128 |
SymbologyType.Code39 |
SymbologyType.QR |
SymbologyType.EAN8 |
SymbologyType.EAN13 |
SymbologyType.UPCA |
SymbologyType.DataMatrix |
SymbologyType.Interleaved2of5;
// Must enumerate every format — miss one, that format silently returns empty
_reader.SymbologyTypes = SymbologyType.Code128 |
SymbologyType.Code39 |
SymbologyType.QR |
SymbologyType.EAN8 |
SymbologyType.EAN13 |
SymbologyType.UPCA |
SymbologyType.DataMatrix |
SymbologyType.Interleaved2of5;
' Must enumerate every format — miss one, that format silently returns empty
_reader.SymbologyTypes = SymbologyType.Code128 Or
SymbologyType.Code39 Or
SymbologyType.QR Or
SymbologyType.EAN8 Or
SymbologyType.EAN13 Or
SymbologyType.UPCA Or
SymbologyType.DataMatrix Or
SymbologyType.Interleaved2of5
バーコード画像にEAN-8バーコードが含まれ、SymbologyType.EAN8がフラグに含まれていない場合、e.SymbologyValueはNULLまたは空で返されます。 デコードイベントは引き続き発生します。 例外は発生しません。 発信者は"バーコードが見つかりません"というメッセージを受け取りますが、画像が読み取れなかったのか、単に設定されていなかったのかは分かりません。
実際には、これは次のことを意味します。 開発者がテストしたフォーマットでは、初期設定は問題なく動作します。
- 新しいバーコード形式がシステムに導入される(サプライヤーがラベルの種類を変更したり、新しい製品ラインで異なるシンボル体系が使用される場合など)。
- その形式の画像はすべて、リーダーがエラーメッセージを表示せずに処理を終了します。
- このエラーは、"フォーマットが設定されていません"ではなく、"画像にバーコードがありません"というエラーと全く同じように見えます。
この問題をデバッグするチームは、画像品質の調査に時間を費やした後、そのフォーマットがフラグリストに含まれていなかったことに気づいた。
IronBarcodeにはSymbologyTypesプロパティはありません。 読み取りのたびに、サポートされている50種類以上のフォーマットをすべて自動的に検出します。 忘れるべき旗など存在しない。
プラットフォームマトリックス
プラットフォーム間の機能格差を理解することが、アーキテクチャ上の制約を理解する最も明確な方法である。
| プラットフォーム | インフラジスティクス・ジェネレーション | インフラジスティクス読解 | IronBarcode生成 | IronBarcodeの読み取り |
|---|---|---|---|---|
| WPF | XamBarcodeコントロール | バーコードリーダー(イベント駆動型) | はい | はい |
| 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 IronBarcode
using IronBarCode;
// Read — 2 lines, any platform
var results = BarcodeReader.Read(imagePath);
return results.FirstOrDefault()?.Value ?? "No barcode found";
// IronBarcode: identical code in WinForms, WPF, ASP.NET Core, console, Docker
// NuGet: dotnet add package IronBarcode
using IronBarCode;
// Read — 2 lines, any platform
var results = BarcodeReader.Read(imagePath);
return results.FirstOrDefault()?.Value ?? "No barcode found";
Imports IronBarCode
' Read — 2 lines, any platform
Dim results = BarcodeReader.Read(imagePath)
Return If(results.FirstOrDefault()?.Value, "No barcode found")
CODE-38787は静的メソッドです。 管理するインスタンスも、配線するイベントも、コールバック・パターンをブリッジする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");
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");
Imports 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-KEY";
IronBarCode.License.LicenseKey = "YOUR-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-KEY"
並列表示:バッチ処理
バッチ処理は、Infragistics WPFリーダーにおける別の構造的な制約を露呈する。 読者は共有イベント・ハンドラを使用し、_result@フィールドは呼び出しごとに上書きされるため、上に示したサービス・クラスは複数の画像を同時に安全に処理できません。 呼び出しは順番に行う必要があります。
// Infragistics: must process sequentially — shared event handler and TaskCompletionSource
// are not thread-safe; concurrent calls would corrupt _result
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);
}
// Infragistics: must process sequentially — shared event handler and TaskCompletionSource
// are not thread-safe; concurrent calls would corrupt _result
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);
}
Imports System.Collections.Generic
' Infragistics: must process sequentially — shared event handler and TaskCompletionSource
' are not thread-safe; concurrent calls would corrupt _result
Dim service As New InfragisticsBarcodeService()
Dim results As New List(Of String)()
For Each file In imageFiles
' Each call must await before starting the next
Dim value As String = Await service.ReadBarcodeAsync(file)
results.Add(value)
Next
この並行処理を行うには、ロック、キュー、セマフォなど、前のデコードが実行中に上書きされないようにするためのインフラが必要です。 これは、本来単純な入出力操作であるはずなのに、決して軽視できない並行処理の問題である。
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);
}
});
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);
}
});
Imports IronBarCode
Imports System.Collections.Concurrent
Imports System.Threading.Tasks
' IronBarcode: parallel batch with thread-safe static API
Dim results As New ConcurrentBag(Of String)()
Parallel.ForEach(imageFiles, Sub(file)
Dim barcodeResults = BarcodeReader.Read(file)
For Each result In barcodeResults
results.Add(result.Value)
Next
End Sub)
また、BarcodeReaderOptionsを通じて、1回の呼び出しで複数のファイルを渡したり、並列処理を設定したりすることもできます:
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})");
}
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})");
}
Imports IronBarCode
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True,
.MaxParallelThreads = 4
}
Dim results = BarcodeReader.Read(imageFiles, options)
For Each result In results
Console.WriteLine($"{result.Value} ({result.Format})")
Next
機能比較
| フィーチャー | インフラジスティクス バーコード | IronBarcode |
|---|---|---|
| WinFormsでのバーコード読み取り | 不可 | はい |
| WPFバーコード読み取り | はい(イベント駆動型) | はい(同期) |
| .NET Coreのサポート | 不可 | はい |
| コンソール/ワーカーサービス | 不可 | はい |
| Docker / Linux | 不可 | はい |
| Azure Functions | 不可 | はい |
| Blazorサーバー | 不可 | はい |
| 自動フォーマット検出 | いいえ、すべての SymbologyType フラグを指定する必要があります | はい、50種類以上のフォーマットを自動検出します。 |
| PDFバーコード読み取り | 不可 | はい、ネイティブで追加パッケージは不要です。 |
| スレッドセーフな読書 | いいえ(共有イベントハンドラ) | はい(静的API) |
| イベント駆動型APIが必要 | はい(WPF) | なし |
| 明示的な画像読み込み(BitmapSource) | はい | いいえ — ファイルパス、バイト、ストリームを受け入れます |
| 同時読書 | いいえ(TaskCompletionSource を介してブリッジする必要があります) | はい |
| バッチ処理 | 逐次処理のみ(並行処理は安全ではありません) | 組み込みの並列処理 |
| サイレントフォーマットエラー | はい(SymbologyTypeフラグが欠落しています) | なし |
| Suiteの依存関係が必要です | はい — Infragistics Ultimate サブスクリプション | いいえ — 単体パッケージ |
| 永久ライセンスオプション | いいえ - 年間購読 | はい |
| おおよそのライセンス費用 | 年間1,675ドル以上(Infragistics Ultimateプラン) | 749ドルから(Lite、永久ライセンス) |
APIマッピングリファレンス
WinForms(UltraWinBarcode) からIronBarcodeへ
| InfragisticsWinForms- UltraWinBarcode | IronBarcode |
|---|---|
| コード-38796 | コード-38797 |
| コード-38798 | CODE-38799--@@(CODE-38800--@@へのパラメータ) |
| コード-38801 | の第一引数--CODE-38802--@@@。 |
| コード-38803 | コード-38804 |
| 読み取りAPIは存在しません | コード-38805 |
WPF(BarcodeReader) からIronBarcodeへ
| InfragisticsWPF— バーコードリーダー | IronBarcode |
|---|---|
| コード-38806 | 静的クラス - インスタンスは不要 |
| コード-38807 | 不要 |
_reader.SymbologyTypes = SymbologyType.X \.|SymbologyType.Y|... |
自動検出 - 設定不要 |
| --コード-38808--@ + @@--コード-38809--@@。 | コード-38810 |
| コード-38811(コールバック中) | コード-38812 |
| CODE-38813--@@@ (コールバック) | コード-38814 |
| コード-38815-- 非同期ラッパー | 同期処理 - ラッパー不要 |
| コード-38816 - デタッチイベントハンドラ | 不要 — インスタンスまたはイベントなし |
| WPFプロジェクトのみ | あらゆる.NETプロジェクトタイプ |
チームが切り替わるとき
いくつかの特定の状況が、一貫してチームをInfragisticsのバーコードサポートから遠ざけている。
WinFormsでは、読解力が必要です。これは最も一般的なシナリオです。 WinFormsアプリケーションはUltraWinBarcodeで問題なくBarCodeを生成しますが、アップロードされた画像からバーコードをスキャンするか、印刷前にラベルを検証するという新しい要件がやってきました。 InfragisticsにはWinForms用の読み取りAPIはありません。 チームは別のライブラリを取り込むか、両方の機能を備えた生成コードを置き換えるかのどちらかを選択する。
新しいASP.NET Coreエンドポイント。Infragisticsのバーコード生成機能を搭載したデスクトップアプリケーションに、専用のWeb APIが追加されました。 エンドポイントは、画像のアップロードを受け付けてバーコード値を返すか、必要に応じてバーコード画像を生成する必要があります。 ASP.NET CoreプロジェクトでInfragisticsのバーコードパッケージを使用する場合、どちらも不可能です。 IronBarcodeはdotnet add package IronBarcodeでインストールされ、コンソールメソッドと同じようにコントローラアクションで動作します。
Dockerデプロイメント。WPFアプリケーションがコンテナ化されるか、そのバーコードロジックがマイクロサービスに抽出されます。WPFアセンブリはLinux Dockerコンテナ内では実行されません。 Infragistics WPFのBarcodeReaderは、これらのツールに対応しています。 IronBarcodeはLinux x64をネイティブターゲットとしています。
バッチ処理のパフォーマンス。ワークフローは、数百または数千のバーコード画像を処理します。 イベント駆動型のInfragisticsリーダーは、それらを順次処理します。 IronBarcodeの静的リーダーはスレッドセーフで、並行処理インフラなしで@--CODE-38820--@@または組み込みの@--CODE-38821--@@オプションをサポートします。
本番環境での無言のフォーマット失敗あるチームが、SymbologyTypes@フラグにそのフォーマットが含まれていないために、あるフォーマットのBarCodeが何週間も無言のまま失敗していることを発見しました。 自動検出に切り替えることで、この故障モードは完全に解消されます。
Infragisticsのサブスクリプション範囲を縮小する。一部のチームは、バーコード制御機能が含まれているという理由だけで、Infragistics Ultimateのサブスクリプション料金を支払っている。 バーコードが必要なことだけが契約の理由である場合、はるかに低コストで利用できる専用のバーコードライブラリを検討する価値がある。
結論
Infragisticsのバーコードサポートにおける中心的な問題は、機能面ではなく、アーキテクチャ面にある。 WPFのBarcodeReaderはBarCodeを読み取ります。 WinFormsのUltraWinBarcode@が生成します。 各コンポーネントは、それぞれ設計された狭い範囲内においてのみ機能します。 問題は、これら2つのコンテキストでは、ほとんどの.NETチームが実際に必要としているものを網羅できないという点です。
現代の.NETアプリケーションにおけるバーコード機能は、単一のUIフレームワーク内に存在することは稀である。 これはWinFormsクライアントとWeb APIに登場します。 これはDockerコンテナとデスクトップ上で動作します。ASP.NETエンドポイントにASP.NETされた画像をスキャンし、コンソールツールからラベルを印刷する必要があります。 これらの方法はどれもInfragisticsのバーコードパッケージでは機能せず、WPFリーダーのイベント駆動型パターンと必須シンボルフラグは、機能する唯一の状況においても、著しい複雑さを増す。
IronBarcodeは、バーコードの読み取りと生成という同じ問題を、あらゆる.NETプロジェクトタイプで同じようにコンパイルおよび実行される静的APIによって解決します。 WPFサービスクラスで書く呼び出しは、ASP.NET Coreコントローラで書く呼び出しと同じであり、Linux Dockerコンテナで書く呼び出しと同じです。 イベント、フラグ、TaskCompletionSourceはありません。 バーコードのロジックは35行ではなく2行で構成されており、その2行はどこでも機能します。
よくある質問
Infragistics BarCodeとは?
Infragistics BarCode は、C# アプリケーションでバーコードを生成および読み取るための .NET バーコードライブラリです。開発者が .NET プロジェクトのバーコードソリューションを選択する際に評価するいくつかの選択肢の 1 つです。
Infragistics BarCodeとIronBarcodeの主な違いは何ですか?
IronBarcodeはインスタンス管理が不要な静的なステートレスAPIを使用していますが、Infragistics BarCodeは通常、使用前にインスタンスの作成と設定が必要です。IronBarcodeはまた、ネイティブPDFサポート、自動フォーマット検出、およびすべての環境でのシングルキーライセンスを提供します。
IronBarcodeはInfragistics Barcodeよりもライセンスが簡単ですか?
IronBarcodeは単一のライセンスキーで開発環境と本番環境の両方をカバーします。これは、SDKキーとランタイムキーを分離するライセンスシステムと比較して、CI/CDパイプラインとDocker構成を簡素化します。
IronBarcodeはInfragistics Barcodeがサポートしているすべてのバーコードフォーマットをサポートしていますか?
IronBarcodeはQRコード、Code 128、Code 39、DataMatrix、PDF417、Aztec、EAN-13、UPC-A、GS1など30以上のバーコードシンボロジーをサポートしています。フォーマットの自動検出は、明示的なフォーマットの列挙が不要であることを意味します。
IronBarcodeはネイティブPDFバーコード読み取りをサポートしていますか?
IronBarcodeは、別のPDFレンダリングライブラリを必要とせず、BarCodeReader.Read("document.pdf")を使用してPDFファイルから直接バーコードを読み取ります。ページごとの結果には、ページ番号、バーコードフォーマット、値、信頼度スコアが含まれます。
IronBarcodeはInfragistics BarCodeと比べてどのようにバッチ処理を行いますか?
IronBarcodeの静的メソッドはステートレスで当然スレッドセーフであり、スレッドごとのインスタンス管理なしにParallel.ForEachを直接使用できます。どの価格帯でもスループットの上限はありません。
IronBarcode はどの.NETバージョンをサポートしていますか?
IronBarcodeは.NET Framework 4.6.2+、.NET Core 3.1、.NET 5、6、7、8、9を単一のNuGetパッケージでサポートしています。プラットフォーム・ターゲットには、Windows x64/x86、Linux x64、macOS x64/ARMが含まれます。
.NETプロジェクトにIronBarcodeをインストールするには?
NuGet経由でIronBarcodeをインストールする:パッケージマネージャーコンソールで'Install-Package IronBarCode'を実行するか、CLIで'dotnet add package IronBarCode'を実行する。追加のSDKインストーラーやランタイムファイルは必要ありません。
Infragisticsとは異なり、購入前にIronBarcodeを評価することはできますか?
IronBarcodeのトライアルモードでは、完全なデコードされたバーコード値を返します。購入を決定する前に、ご自身のドキュメントで読み取り精度をベンチマークすることができます。
Infragistics BarCodeとIronBarcodeの価格の違いは何ですか?
IronBarcodeは、開発および量産をカバーする永続的なシングルデベロッパーライセンスで749ドルからご利用いただけます。価格の詳細とボリュームオプションはIronBarcodeのライセンスページでご覧いただけます。別途ランタイムライセンスは必要ありません。
Infragistics BarCodeからIronBarcodeへの移行は簡単ですか?
Infragistics BarCodeからIronBarcodeへの移行は、主にインスタンスベースのAPIコールをIronBarcodeの静的メソッドに置き換え、ライセンスの定型文を削除し、結果のプロパティ名を更新します。ほとんどの移行はコードを追加するのではなく、コードを削減します。
IronBarcodeはロゴ入りQRコードを生成できますか?
はい。QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png")は、設定可能なエラー修正機能付きで、ブランド画像をネイティブにQRコードに埋め込みます。カラーQRコードもChangeBarCodeColor()でサポートされています。

