IRONBARCODEの使用 C# USB BarCodeスキャナ:IronBarcode完全統合ガイド Jordi Bardia 公開日:2026年1月21日 IronBarcode をダウンロード NuGet ダウンロード DLL ダウンロード 無料トライアル LLM向けのコピー LLM向けのコピー LLM 用の Markdown としてページをコピーする ChatGPTで開く このページについてChatGPTに質問する ジェミニで開く このページについてGeminiに問い合わせる Grokで開く このページについてGrokに質問する 困惑の中で開く このページについてPerplexityに問い合わせる 共有する Facebook で共有 Xでシェア(Twitter) LinkedIn で共有 URLをコピー 記事をメールで送る USB バーコード スキャナーはキーボード入力デバイスとして機能し、スキャンしたデータを C# アプリケーションに自動的に送信します。 IronBarcode はこの入力を処理して形式を検証し、構造化データを抽出し、新しいバーコードを生成し、展開の複雑さを最小限に抑えながら在庫管理システム用の完全なスキャン ソリューションを作成します。 小売、倉庫、在庫管理業務は、効率的なバーコードスキャンに依存します。 IronBarcodeとその効果的な検証および生成機能を使用すると、開発者は単純なデータキャプチャを超えた信頼性の高い USB バーコード スキャナー アプリケーションを構築できます。 ライブラリはバーコード データを検証し、構造化された情報を抽出し、新しいバーコードを即座に生成します。 このガイドでは、C# で USB バーコード スキャナーをIronBarcodeと統合する方法を説明します。 その結果、.NET Framework と .NET アプリケーションの両方で動作するリアルタイム スキャン ソリューションが実現し、チームが在庫を管理し、アイテムを効率的に追跡できるようになります。 販売時点管理システムを構築する場合でも、企業の在庫管理ソリューションを構築する場合でも、IronBarcode のクロスプラットフォーム互換性により、アプリケーションはWindows 、 Linux 、またはmacOSでスムーズに実行されます。 USBバーコードスキャナーはIronBarcodeとどのように連携するか? 統合においてキーボード ウェッジ モードが重要なのはなぜですか? ほとんどの USB バーコード スキャナーは HID キーボード ウェッジ モードで動作し、キーボード入力をエミュレートして簡単にコードをスキャンできます。 バーコードをスキャンする場合、スキャナーはデータを"入力"し、その後に Enter キーを押します。 IronBarcode は、フォーマットを検証し、構造化データを抽出し、スキャンに応じて即座にバーコードを生成できるようにすることで、この生の入力を改善します。 さまざまなスキャナー通信モードを理解することは、エンタープライズ アプリケーションに役立ちます。 プロフェッショナル スキャナーは、キーボード ウェッジ モードを超えてシリアル通信と直接 USB HID モードをサポートします。 // Example: Handling different scanner input modes public interface IScannerInput { event EventHandler<string> BarcodeScanned; void StartListening(); void StopListening(); } // Keyboard wedge implementation public class KeyboardWedgeScanner : IScannerInput { public event EventHandler<string> BarcodeScanned; private readonly TextBox _inputBox; public KeyboardWedgeScanner(TextBox inputBox) { _inputBox = inputBox; _inputBox.KeyPress += OnKeyPress; } private void OnKeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == (char)Keys.Enter) { BarcodeScanned?.Invoke(this, _inputBox.Text); _inputBox.Clear(); } } public void StartListening() => _inputBox.Focus(); public void StopListening() => _inputBox.Enabled = false; } // Serial port implementation for professional scanners public class SerialPortScanner : IScannerInput { public event EventHandler<string> BarcodeScanned; private System.IO.Ports.SerialPort _port; public SerialPortScanner(string portName, int baudRate = 9600) { _port = new System.IO.Ports.SerialPort(portName, baudRate); _port.DataReceived += OnDataReceived; } private void OnDataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { string data = _port.ReadLine().Trim(); BarcodeScanned?.Invoke(this, data); } public void StartListening() => _port.Open(); public void StopListening() => _port.Close(); } // Example: Handling different scanner input modes public interface IScannerInput { event EventHandler<string> BarcodeScanned; void StartListening(); void StopListening(); } // Keyboard wedge implementation public class KeyboardWedgeScanner : IScannerInput { public event EventHandler<string> BarcodeScanned; private readonly TextBox _inputBox; public KeyboardWedgeScanner(TextBox inputBox) { _inputBox = inputBox; _inputBox.KeyPress += OnKeyPress; } private void OnKeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == (char)Keys.Enter) { BarcodeScanned?.Invoke(this, _inputBox.Text); _inputBox.Clear(); } } public void StartListening() => _inputBox.Focus(); public void StopListening() => _inputBox.Enabled = false; } // Serial port implementation for professional scanners public class SerialPortScanner : IScannerInput { public event EventHandler<string> BarcodeScanned; private System.IO.Ports.SerialPort _port; public SerialPortScanner(string portName, int baudRate = 9600) { _port = new System.IO.Ports.SerialPort(portName, baudRate); _port.DataReceived += OnDataReceived; } private void OnDataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { string data = _port.ReadLine().Trim(); BarcodeScanned?.Invoke(this, data); } public void StartListening() => _port.Open(); public void StopListening() => _port.Close(); } Imports System Imports System.Windows.Forms Imports System.IO.Ports ' Example: Handling different scanner input modes Public Interface IScannerInput Event BarcodeScanned As EventHandler(Of String) Sub StartListening() Sub StopListening() End Interface ' Keyboard wedge implementation Public Class KeyboardWedgeScanner Implements IScannerInput Public Event BarcodeScanned As EventHandler(Of String) Implements IScannerInput.BarcodeScanned Private ReadOnly _inputBox As TextBox Public Sub New(inputBox As TextBox) _inputBox = inputBox AddHandler _inputBox.KeyPress, AddressOf OnKeyPress End Sub Private Sub OnKeyPress(sender As Object, e As KeyPressEventArgs) If e.KeyChar = ChrW(Keys.Enter) Then RaiseEvent BarcodeScanned(Me, _inputBox.Text) _inputBox.Clear() End If End Sub Public Sub StartListening() Implements IScannerInput.StartListening _inputBox.Focus() End Sub Public Sub StopListening() Implements IScannerInput.StopListening _inputBox.Enabled = False End Sub End Class ' Serial port implementation for professional scanners Public Class SerialPortScanner Implements IScannerInput Public Event BarcodeScanned As EventHandler(Of String) Implements IScannerInput.BarcodeScanned Private _port As SerialPort Public Sub New(portName As String, Optional baudRate As Integer = 9600) _port = New SerialPort(portName, baudRate) AddHandler _port.DataReceived, AddressOf OnDataReceived End Sub Private Sub OnDataReceived(sender As Object, e As SerialDataReceivedEventArgs) Dim data As String = _port.ReadLine().Trim() RaiseEvent BarcodeScanned(Me, data) End Sub Public Sub StartListening() Implements IScannerInput.StartListening _port.Open() End Sub Public Sub StopListening() Implements IScannerInput.StopListening _port.Close() End Sub End Class $vbLabelText $csharpLabel 開発者はどのようにしてスキャナーの入力をキャプチャして検証できるのでしょうか? // Capture scanner input and validate with IronBarcode private async void ProcessScannerInput(string scannedData) { try { // Validate the scanned data format var validationBarcode = BarcodeWriter.CreateBarcode(scannedData, BarcodeEncoding.Code128); var results = await BarcodeReader.ReadAsync(validationBarcode.ToBitmap()); if (results.Any()) { var result = results.First(); // Extract metadata for enterprise systems var scanMetadata = new ScanMetadata { BarcodeType = result.BarcodeType, Value = result.Value, Confidence = result.Confidence, ScanTimestamp = DateTime.UtcNow, ScannerDevice = GetCurrentScannerInfo() }; await ProcessValidBarcode(scanMetadata); } else { HandleInvalidScan(scannedData); } } catch (Exception ex) { LogScanError(ex, scannedData); } } // Capture scanner input and validate with IronBarcode private async void ProcessScannerInput(string scannedData) { try { // Validate the scanned data format var validationBarcode = BarcodeWriter.CreateBarcode(scannedData, BarcodeEncoding.Code128); var results = await BarcodeReader.ReadAsync(validationBarcode.ToBitmap()); if (results.Any()) { var result = results.First(); // Extract metadata for enterprise systems var scanMetadata = new ScanMetadata { BarcodeType = result.BarcodeType, Value = result.Value, Confidence = result.Confidence, ScanTimestamp = DateTime.UtcNow, ScannerDevice = GetCurrentScannerInfo() }; await ProcessValidBarcode(scanMetadata); } else { HandleInvalidScan(scannedData); } } catch (Exception ex) { LogScanError(ex, scannedData); } } Imports System Imports System.Linq Imports System.Threading.Tasks Imports IronBarCode Private Async Sub ProcessScannerInput(scannedData As String) Try ' Validate the scanned data format Dim validationBarcode = BarcodeWriter.CreateBarcode(scannedData, BarcodeEncoding.Code128) Dim results = Await BarcodeReader.ReadAsync(validationBarcode.ToBitmap()) If results.Any() Then Dim result = results.First() ' Extract metadata for enterprise systems Dim scanMetadata As New ScanMetadata With { .BarcodeType = result.BarcodeType, .Value = result.Value, .Confidence = result.Confidence, .ScanTimestamp = DateTime.UtcNow, .ScannerDevice = GetCurrentScannerInfo() } Await ProcessValidBarcode(scanMetadata) Else HandleInvalidScan(scannedData) End If Catch ex As Exception LogScanError(ex, scannedData) End Try End Sub $vbLabelText $csharpLabel このコードは、さまざまな方法でスキャナーの入力をキャプチャし、 IronBarcode の非同期読み取り機能を使用して、UI スレッドをブロックせずにスキャンされたデータを検証します。 信頼しきい値機能により、実稼働環境では高品質のスキャンのみが処理されるようになります。 バーコードスキャナープロジェクトをどのように設定するか? 必須の依存関係と構成は何ですか? まず、デスクトップ シナリオ用に Visual Studio で Windows フォーム アプリケーションを作成するか、Web ベースのスキャン アプリケーションの場合はBlazor を検討してください。 モバイル在庫ソリューションの場合、 .NET MAUI はAndroidおよびiOS 機能による優れたクロスプラットフォーム サポートを提供します。 次に、NuGet パッケージ マネージャー コンソールからIronBarcode をインストールします。 Install-Package BarCode コンテナ化されたデプロイメントの場合、 IronBarcode は Docker とシームレスに連携し、エンタープライズ環境向けのデプロイメント マニフェストを提供します。 クイックスタート: C# で QR コード画像を作成する QR コードを作成すると、スキャン可能な四角形にデータをエンコードした視覚的な表現が生成されます。 今すぐ NuGet で PDF を作成してみましょう: NuGet パッケージ マネージャーを使用して IronBarcode をインストールします PM > Install-Package BarCode このコード スニペットをコピーして実行します。 using IronBarCode; // Generate QR code from scanned inventory data string inventoryCode = "INV-2025-001"; var qrCode = BarcodeWriter.CreateQrCode(inventoryCode); // Apply styling for professional labels qrCode.ResizeTo(300, 300); qrCode.SetMargins(10); qrCode.ChangeQrCodeColor(IronSoftware.Drawing.Color.DarkBlue); // Add logo for branding qrCode.AddLogoToQrCode("company_logo.png", 60, 60); // Save as high-quality image qrCode.SaveAsPng("inventory_qr.png"); // Alternative: Save as PDF for printing qrCode.SaveAsPdf("inventory_qr.pdf"); 実際の環境でテストするためにデプロイする 今すぐ無料トライアルでプロジェクトに IronBarcode を使い始めましょう 30日間無料トライアル アプリケーションにはどの名前空間を含める必要がありますか? ドキュメントの例とともに、次の重要な名前空間をフォームに追加します。 using IronBarCode; using System.Drawing; using System.Linq; using System.Threading.Tasks; using System.IO.Ports; // For serial scanners using System.Diagnostics; // For performance monitoring using IronBarCode; using System.Drawing; using System.Linq; using System.Threading.Tasks; using System.IO.Ports; // For serial scanners using System.Diagnostics; // For performance monitoring Imports IronBarCode Imports System.Drawing Imports System.Linq Imports System.Threading.Tasks Imports System.IO.Ports ' For serial scanners Imports System.Diagnostics ' For performance monitoring $vbLabelText $csharpLabel 開発者はスキャナー入力フォームをどのように構成すればよいでしょうか? エンタープライズ アプリケーションは、複数のスキャナー ブランドをサポートする柔軟なスキャナー構成システムの恩恵を受けます。 public class ScannerConfiguration { public string ScannerType { get; set; } // "KeyboardWedge", "Serial", "USB-HID" public string PortName { get; set; } // For serial scanners public int BaudRate { get; set; } = 9600; public string Terminator { get; set; } = "\r\n"; public bool EnableBeep { get; set; } = true; // Brand-specific settings public Dictionary<string, string> BrandSettings { get; set; } = new(); // Common scanner brand configurations public static ScannerConfiguration GetHoneywellConfig() { return new ScannerConfiguration { ScannerType = "Serial", BaudRate = 115200, BrandSettings = new Dictionary<string, string> { {"Prefix", "STX"}, {"Suffix", "ETX"}, {"TriggerMode", "Manual"} } }; } public static ScannerConfiguration GetSymbolConfig() { return new ScannerConfiguration { ScannerType = "KeyboardWedge", BrandSettings = new Dictionary<string, string> { {"ScanMode", "Continuous"}, {"BeepVolume", "High"} } }; } } public class ScannerConfiguration { public string ScannerType { get; set; } // "KeyboardWedge", "Serial", "USB-HID" public string PortName { get; set; } // For serial scanners public int BaudRate { get; set; } = 9600; public string Terminator { get; set; } = "\r\n"; public bool EnableBeep { get; set; } = true; // Brand-specific settings public Dictionary<string, string> BrandSettings { get; set; } = new(); // Common scanner brand configurations public static ScannerConfiguration GetHoneywellConfig() { return new ScannerConfiguration { ScannerType = "Serial", BaudRate = 115200, BrandSettings = new Dictionary<string, string> { {"Prefix", "STX"}, {"Suffix", "ETX"}, {"TriggerMode", "Manual"} } }; } public static ScannerConfiguration GetSymbolConfig() { return new ScannerConfiguration { ScannerType = "KeyboardWedge", BrandSettings = new Dictionary<string, string> { {"ScanMode", "Continuous"}, {"BeepVolume", "High"} } }; } } Option Strict On Public Class ScannerConfiguration Public Property ScannerType As String ' "KeyboardWedge", "Serial", "USB-HID" Public Property PortName As String ' For serial scanners Public Property BaudRate As Integer = 9600 Public Property Terminator As String = vbCrLf Public Property EnableBeep As Boolean = True ' Brand-specific settings Public Property BrandSettings As Dictionary(Of String, String) = New Dictionary(Of String, String)() ' Common scanner brand configurations Public Shared Function GetHoneywellConfig() As ScannerConfiguration Return New ScannerConfiguration With { .ScannerType = "Serial", .BaudRate = 115200, .BrandSettings = New Dictionary(Of String, String) From { {"Prefix", "STX"}, {"Suffix", "ETX"}, {"TriggerMode", "Manual"} } } End Function Public Shared Function GetSymbolConfig() As ScannerConfiguration Return New ScannerConfiguration With { .ScannerType = "KeyboardWedge", .BrandSettings = New Dictionary(Of String, String) From { {"ScanMode", "Continuous"}, {"BeepVolume", "High"} } } End Function End Class $vbLabelText $csharpLabel IronBarcodeを使用してスキャンバーコードをどのように検証するか? バーコード検証に最適なアプローチは何ですか? IronBarcode は、さまざまな形式のバーコード データの検証と解析に優れています。 ライブラリは、Code 128 、 EAN-13 、 Code 39などの1D バーコードに加えて、 QR コードやData Matrixなどの2D 形式もサポートしています。 検証の改善アプローチは次のとおりです。 public class BarcodeValidator { private readonly Dictionary<BarcodeType, Func<string, bool>> _validators; public BarcodeValidator() { _validators = new Dictionary<BarcodeType, Func<string, bool>> { { BarcodeType.Code128, ValidateCode128 }, { BarcodeType.EAN13, ValidateEAN13 }, { BarcodeType.UPCA, ValidateUPCA }, { BarcodeType.QRCode, ValidateQRCode } }; } public async Task<ValidationResult> ValidateScannedBarcodeAsync(string scannedText) { var result = new ValidationResult(); try { // Attempt multiple barcode formats for flexibility var encodings = new[] { BarcodeEncoding.Code128, BarcodeEncoding.EAN13, BarcodeEncoding.UPCA, BarcodeEncoding.QRCode }; foreach (var encoding in encodings) { try { var barcode = BarcodeWriter.CreateBarcode(scannedText, encoding); var validationResults = await BarcodeReader.ReadAsync(barcode.ToBitmap()); if (validationResults.Any()) { var validated = validationResults.First(); result.IsValid = true; result.Format = validated.BarcodeType; result.Value = validated.Value; result.Confidence = validated.Confidence; // Apply format-specific validation if (_validators.ContainsKey(validated.BarcodeType)) { result.PassesBusinessRules = _validators___PROTECTED_LINK_35___; } break; } } catch { /* Try next format */ } } // Handle GS1-128 for supply chain applications if (!result.IsValid && IsGS1Format(scannedText)) { result = await ValidateGS1BarcodeAsync(scannedText); } } catch (Exception ex) { result.Error = ex.Message; } return result; } private bool ValidateEAN13(string value) { // EAN-13 checksum validation if (value.Length != 13) return false; int sum = 0; for (int i = 0; i < 12; i++) { int digit = int.Parse(value[i].ToString()); sum += (i % 2 == 0) ? digit : digit * 3; } int checkDigit = (10 - (sum % 10)) % 10; return checkDigit == int.Parse(value[12].ToString()); } } public class BarcodeValidator { private readonly Dictionary<BarcodeType, Func<string, bool>> _validators; public BarcodeValidator() { _validators = new Dictionary<BarcodeType, Func<string, bool>> { { BarcodeType.Code128, ValidateCode128 }, { BarcodeType.EAN13, ValidateEAN13 }, { BarcodeType.UPCA, ValidateUPCA }, { BarcodeType.QRCode, ValidateQRCode } }; } public async Task<ValidationResult> ValidateScannedBarcodeAsync(string scannedText) { var result = new ValidationResult(); try { // Attempt multiple barcode formats for flexibility var encodings = new[] { BarcodeEncoding.Code128, BarcodeEncoding.EAN13, BarcodeEncoding.UPCA, BarcodeEncoding.QRCode }; foreach (var encoding in encodings) { try { var barcode = BarcodeWriter.CreateBarcode(scannedText, encoding); var validationResults = await BarcodeReader.ReadAsync(barcode.ToBitmap()); if (validationResults.Any()) { var validated = validationResults.First(); result.IsValid = true; result.Format = validated.BarcodeType; result.Value = validated.Value; result.Confidence = validated.Confidence; // Apply format-specific validation if (_validators.ContainsKey(validated.BarcodeType)) { result.PassesBusinessRules = _validators___PROTECTED_LINK_35___; } break; } } catch { /* Try next format */ } } // Handle GS1-128 for supply chain applications if (!result.IsValid && IsGS1Format(scannedText)) { result = await ValidateGS1BarcodeAsync(scannedText); } } catch (Exception ex) { result.Error = ex.Message; } return result; } private bool ValidateEAN13(string value) { // EAN-13 checksum validation if (value.Length != 13) return false; int sum = 0; for (int i = 0; i < 12; i++) { int digit = int.Parse(value[i].ToString()); sum += (i % 2 == 0) ? digit : digit * 3; } int checkDigit = (10 - (sum % 10)) % 10; return checkDigit == int.Parse(value[12].ToString()); } } Imports System Imports System.Collections.Generic Imports System.Linq Imports System.Threading.Tasks Public Class BarcodeValidator Private ReadOnly _validators As Dictionary(Of BarcodeType, Func(Of String, Boolean)) Public Sub New() _validators = New Dictionary(Of BarcodeType, Func(Of String, Boolean)) From { {BarcodeType.Code128, AddressOf ValidateCode128}, {BarcodeType.EAN13, AddressOf ValidateEAN13}, {BarcodeType.UPCA, AddressOf ValidateUPCA}, {BarcodeType.QRCode, AddressOf ValidateQRCode} } End Sub Public Async Function ValidateScannedBarcodeAsync(scannedText As String) As Task(Of ValidationResult) Dim result As New ValidationResult() Try ' Attempt multiple barcode formats for flexibility Dim encodings = {BarcodeEncoding.Code128, BarcodeEncoding.EAN13, BarcodeEncoding.UPCA, BarcodeEncoding.QRCode} For Each encoding In encodings Try Dim barcode = BarcodeWriter.CreateBarcode(scannedText, encoding) Dim validationResults = Await BarcodeReader.ReadAsync(barcode.ToBitmap()) If validationResults.Any() Then Dim validated = validationResults.First() result.IsValid = True result.Format = validated.BarcodeType result.Value = validated.Value result.Confidence = validated.Confidence ' Apply format-specific validation If _validators.ContainsKey(validated.BarcodeType) Then result.PassesBusinessRules = _validators(validated.BarcodeType).Invoke(validated.Value) End If Exit For End If Catch ' Try next format End Try Next ' Handle GS1-128 for supply chain applications If Not result.IsValid AndAlso IsGS1Format(scannedText) Then result = Await ValidateGS1BarcodeAsync(scannedText) End If Catch ex As Exception result.Error = ex.Message End Try Return result End Function Private Function ValidateEAN13(value As String) As Boolean ' EAN-13 checksum validation If value.Length <> 13 Then Return False Dim sum As Integer = 0 For i As Integer = 0 To 11 Dim digit As Integer = Integer.Parse(value(i).ToString()) sum += If(i Mod 2 = 0, digit, digit * 3) Next Dim checkDigit As Integer = (10 - (sum Mod 10)) Mod 10 Return checkDigit = Integer.Parse(value(12).ToString()) End Function End Class $vbLabelText $csharpLabel 複数ページのドキュメントの場合、IronBarcode はPDFおよび複数ページの TIFF ファイルからバーコードを読み取ることができます。 アプリケーションはどのバーコード形式を検証できますか? この検証方法は、すべての主要な1D バーコード形式と2D バーコード形式をサポートしています。 特殊なアプリケーション向けに、IronBarcode は、サプライ チェーン管理で一般的に使用されるMSI バーコードとGS1-128形式もサポートしています。 スキャンされた入力からレスポンスバーコードを生成する方法は? アプリケーションはいつスキャン データから新しいバーコードを作成する必要がありますか? 生産準備が整った機能を使用して、スキャンしたデータをラベル付け、追跡、在庫管理用の新しいバーコードに変換します。 IronBarcode の生成機能は、さまざまなデータ タイプからバーコードを作成することをサポートします。 バーコードを画像、 PDF 、 HTML 、またはストリームとしてエクスポートします。 public class InventoryBarcodeGenerator { private readonly string _labelPath = "labels"; public InventoryBarcodeGenerator() { // Ensure proper licensing for production use IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"; System.IO.Directory.CreateDirectory(_labelPath); } public async Task<GeneratedBarcode> GenerateInventoryLabelAsync(string productCode, InventoryAction action) { try { // Generate structured inventory code var inventoryCode = GenerateStructuredCode(productCode, action); // Create high-quality barcode with production settings var barcode = BarcodeWriter.CreateBarcode(inventoryCode, BarcodeEncoding.Code128); // Apply enterprise styling barcode.ResizeTo(400, 120); barcode.SetMargins(10); barcode.AddAnnotationTextAboveBarcode(inventoryCode, IronSoftware.Drawing.Font.Arial, 12); barcode.ChangeBarCodeColor(IronSoftware.Drawing.Color.Black); // Add data matrix for redundancy in warehouse environments var dataMatrix = BarcodeWriter.CreateBarcode(inventoryCode, BarcodeEncoding.DataMatrix); dataMatrix.ResizeTo(100, 100); // Save with error handling var timestamp = DateTime.Now.ToString("yyyyMMddHHmmss"); var fileName = $"{inventoryCode}_{timestamp}"; // Save as multiple formats for flexibility await Task.Run(() => { barcode.SaveAsPng($"{_labelPath}\\{fileName}.png"); barcode.SaveAsPdf($"{_labelPath}\\{fileName}.pdf"); barcode.SaveAsSvg($"{_labelPath}\\{fileName}.svg"); }); return new GeneratedBarcode { Code = inventoryCode, LinearBarcodePath = $"{_labelPath}\\{fileName}.png", DataMatrixPath = $"{_labelPath}\\{fileName}_dm.png", Timestamp = DateTime.UtcNow }; } catch (Exception ex) { throw new BarcodeGenerationException($"Failed to generate barcode for {productCode}", ex); } } private string GenerateStructuredCode(string productCode, InventoryAction action) { // Implement GS1 Application Identifiers for enterprise compatibility var ai = action switch { InventoryAction.Receive => "10", // Batch/Lot number InventoryAction.Ship => "400", // Customer purchase order InventoryAction.Count => "37", // Quantity _ => "91" // Internal use }; return $"({ai}){DateTime.Now:yyMMdd}{productCode}"; } } public class InventoryBarcodeGenerator { private readonly string _labelPath = "labels"; public InventoryBarcodeGenerator() { // Ensure proper licensing for production use IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"; System.IO.Directory.CreateDirectory(_labelPath); } public async Task<GeneratedBarcode> GenerateInventoryLabelAsync(string productCode, InventoryAction action) { try { // Generate structured inventory code var inventoryCode = GenerateStructuredCode(productCode, action); // Create high-quality barcode with production settings var barcode = BarcodeWriter.CreateBarcode(inventoryCode, BarcodeEncoding.Code128); // Apply enterprise styling barcode.ResizeTo(400, 120); barcode.SetMargins(10); barcode.AddAnnotationTextAboveBarcode(inventoryCode, IronSoftware.Drawing.Font.Arial, 12); barcode.ChangeBarCodeColor(IronSoftware.Drawing.Color.Black); // Add data matrix for redundancy in warehouse environments var dataMatrix = BarcodeWriter.CreateBarcode(inventoryCode, BarcodeEncoding.DataMatrix); dataMatrix.ResizeTo(100, 100); // Save with error handling var timestamp = DateTime.Now.ToString("yyyyMMddHHmmss"); var fileName = $"{inventoryCode}_{timestamp}"; // Save as multiple formats for flexibility await Task.Run(() => { barcode.SaveAsPng($"{_labelPath}\\{fileName}.png"); barcode.SaveAsPdf($"{_labelPath}\\{fileName}.pdf"); barcode.SaveAsSvg($"{_labelPath}\\{fileName}.svg"); }); return new GeneratedBarcode { Code = inventoryCode, LinearBarcodePath = $"{_labelPath}\\{fileName}.png", DataMatrixPath = $"{_labelPath}\\{fileName}_dm.png", Timestamp = DateTime.UtcNow }; } catch (Exception ex) { throw new BarcodeGenerationException($"Failed to generate barcode for {productCode}", ex); } } private string GenerateStructuredCode(string productCode, InventoryAction action) { // Implement GS1 Application Identifiers for enterprise compatibility var ai = action switch { InventoryAction.Receive => "10", // Batch/Lot number InventoryAction.Ship => "400", // Customer purchase order InventoryAction.Count => "37", // Quantity _ => "91" // Internal use }; return $"({ai}){DateTime.Now:yyMMdd}{productCode}"; } } Imports System Imports System.IO Imports System.Threading.Tasks Imports IronBarCode Public Class InventoryBarcodeGenerator Private ReadOnly _labelPath As String = "labels" Public Sub New() ' Ensure proper licensing for production use IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY" Directory.CreateDirectory(_labelPath) End Sub Public Async Function GenerateInventoryLabelAsync(productCode As String, action As InventoryAction) As Task(Of GeneratedBarcode) Try ' Generate structured inventory code Dim inventoryCode = GenerateStructuredCode(productCode, action) ' Create high-quality barcode with production settings Dim barcode = BarcodeWriter.CreateBarcode(inventoryCode, BarcodeEncoding.Code128) ' Apply enterprise styling barcode.ResizeTo(400, 120) barcode.SetMargins(10) barcode.AddAnnotationTextAboveBarcode(inventoryCode, IronSoftware.Drawing.Font.Arial, 12) barcode.ChangeBarCodeColor(IronSoftware.Drawing.Color.Black) ' Add data matrix for redundancy in warehouse environments Dim dataMatrix = BarcodeWriter.CreateBarcode(inventoryCode, BarcodeEncoding.DataMatrix) dataMatrix.ResizeTo(100, 100) ' Save with error handling Dim timestamp = DateTime.Now.ToString("yyyyMMddHHmmss") Dim fileName = $"{inventoryCode}_{timestamp}" ' Save as multiple formats for flexibility Await Task.Run(Sub() barcode.SaveAsPng($"{_labelPath}\{fileName}.png") barcode.SaveAsPdf($"{_labelPath}\{fileName}.pdf") barcode.SaveAsSvg($"{_labelPath}\{fileName}.svg") End Sub) Return New GeneratedBarcode With { .Code = inventoryCode, .LinearBarcodePath = $"{_labelPath}\{fileName}.png", .DataMatrixPath = $"{_labelPath}\{fileName}_dm.png", .Timestamp = DateTime.UtcNow } Catch ex As Exception Throw New BarcodeGenerationException($"Failed to generate barcode for {productCode}", ex) End Try End Function Private Function GenerateStructuredCode(productCode As String, action As InventoryAction) As String ' Implement GS1 Application Identifiers for enterprise compatibility Dim ai As String = action Select Case action Case InventoryAction.Receive ai = "10" ' Batch/Lot number Case InventoryAction.Ship ai = "400" ' Customer purchase order Case InventoryAction.Count ai = "37" ' Quantity Case Else ai = "91" ' Internal use End Select Return $"({ai}){DateTime.Now:yyMMdd}{productCode}" End Function End Class $vbLabelText $csharpLabel 特殊な要件の場合、開発者は高コントラスト印刷用の1 BPP バーコード イメージを作成したり、既存の PDF にバーコードをスタンプしたりできます。 生成されたバーコードにはどのようなカスタマイズ オプションがありますか? IronBarcode は、色の変更、余白の設定、ロゴを埋め込んだQR コードのスタイル設定など、幅広いカスタマイズ オプションを提供します。 完全なバーコードスキャンアプリケーションをどのように構築するか? 実稼働対応のスキャナー実装とはどのようなものですか? 完全なエラー処理とパフォーマンスの最適化を備えたエンタープライズ グレードの実装をご紹介します。 このアプローチでは、IronBarcode のパフォーマンス機能と非同期機能を使用してスループットを向上させます。 using IronBarCode; using System; using System.Collections.Concurrent; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace EnterpriseBarcodeScanner { public partial class HighVolumeScanner : Form { private readonly ConcurrentQueue<ScanData> _scanQueue = new(); private readonly SemaphoreSlim _processingSemaphore; private readonly CancellationTokenSource _cancellationTokenSource = new(); private IScannerInput _activeScanner; private int _maxConcurrentProcessing = Environment.ProcessorCount; public HighVolumeScanner() { InitializeComponent(); _processingSemaphore = new SemaphoreSlim(_maxConcurrentProcessing); InitializeScanner(); StartProcessingQueue(); } private void InitializeScanner() { // Auto-detect scanner type if (SerialPort.GetPortNames().Any(p => p.Contains("COM"))) { _activeScanner = new SerialPortScanner("COM3", 115200); } else { _activeScanner = new KeyboardWedgeScanner(txtScanner); } _activeScanner.BarcodeScanned += OnBarcodeScanned; _activeScanner.StartListening(); } private void OnBarcodeScanned(object sender, string barcode) { // Queue for async processing to maintain scanner responsiveness _scanQueue.Enqueue(new ScanData { RawData = barcode, ScanTime = DateTime.UtcNow }); } private async void StartProcessingQueue() { while (!_cancellationTokenSource.Token.IsCancellationRequested) { if (_scanQueue.TryDequeue(out var scanData)) { await _processingSemaphore.WaitAsync(); _ = Task.Run(async () => { try { await ProcessScanAsync(scanData); } finally { _processingSemaphore.Release(); } }, _cancellationTokenSource.Token); } else { await Task.Delay(10); // Prevent CPU spinning } } } private async Task ProcessScanAsync(ScanData scanData) { try { // Validate with timeout for performance using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(2)); var validationTask = ValidateAndProcessBarcodeAsync(scanData.RawData); var completedTask = await Task.WhenAny(validationTask, Task.Delay(Timeout.Infinite, cts.Token)); if (completedTask == validationTask) { var result = await validationTask; if (result.Success) { // Update UI thread-safe BeginInvoke(new Action(() => { AddToInventory(result); GenerateLabelsIfNeeded(result); })); } else { LogScanError(scanData, result.Error); } } else { LogScanTimeout(scanData); } } catch (Exception ex) { LogCriticalError(ex, scanData); } } private async Task<ProcessingResult> ValidateAndProcessBarcodeAsync(string rawData) { // Implement smart caching for repeated scans if (BarcodeCache.TryGetCached(rawData, out var cachedResult)) { return cachedResult; } // Use IronBarcode with optimized settings var barcodeOptions = new BarcodeReaderOptions { Speed = ReadingSpeed.Balanced, ExpectMultipleBarcodes = false, ExpectBarcodeTypes = BarcodeEncoding.Code128 | BarcodeEncoding.QRCode, MaxParallelThreads = 1 // Single barcode, no need for parallel }; // Generate and validate var testBarcode = BarcodeWriter.CreateBarcode(rawData, BarcodeEncoding.Code128); var results = await BarcodeReader.ReadAsync(testBarcode.ToBitmap(), barcodeOptions); var result = new ProcessingResult { Success = results.Any(), BarcodeData = results.FirstOrDefault(), ProcessingTime = DateTime.UtcNow }; BarcodeCache.Add(rawData, result); return result; } } } using IronBarCode; using System; using System.Collections.Concurrent; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace EnterpriseBarcodeScanner { public partial class HighVolumeScanner : Form { private readonly ConcurrentQueue<ScanData> _scanQueue = new(); private readonly SemaphoreSlim _processingSemaphore; private readonly CancellationTokenSource _cancellationTokenSource = new(); private IScannerInput _activeScanner; private int _maxConcurrentProcessing = Environment.ProcessorCount; public HighVolumeScanner() { InitializeComponent(); _processingSemaphore = new SemaphoreSlim(_maxConcurrentProcessing); InitializeScanner(); StartProcessingQueue(); } private void InitializeScanner() { // Auto-detect scanner type if (SerialPort.GetPortNames().Any(p => p.Contains("COM"))) { _activeScanner = new SerialPortScanner("COM3", 115200); } else { _activeScanner = new KeyboardWedgeScanner(txtScanner); } _activeScanner.BarcodeScanned += OnBarcodeScanned; _activeScanner.StartListening(); } private void OnBarcodeScanned(object sender, string barcode) { // Queue for async processing to maintain scanner responsiveness _scanQueue.Enqueue(new ScanData { RawData = barcode, ScanTime = DateTime.UtcNow }); } private async void StartProcessingQueue() { while (!_cancellationTokenSource.Token.IsCancellationRequested) { if (_scanQueue.TryDequeue(out var scanData)) { await _processingSemaphore.WaitAsync(); _ = Task.Run(async () => { try { await ProcessScanAsync(scanData); } finally { _processingSemaphore.Release(); } }, _cancellationTokenSource.Token); } else { await Task.Delay(10); // Prevent CPU spinning } } } private async Task ProcessScanAsync(ScanData scanData) { try { // Validate with timeout for performance using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(2)); var validationTask = ValidateAndProcessBarcodeAsync(scanData.RawData); var completedTask = await Task.WhenAny(validationTask, Task.Delay(Timeout.Infinite, cts.Token)); if (completedTask == validationTask) { var result = await validationTask; if (result.Success) { // Update UI thread-safe BeginInvoke(new Action(() => { AddToInventory(result); GenerateLabelsIfNeeded(result); })); } else { LogScanError(scanData, result.Error); } } else { LogScanTimeout(scanData); } } catch (Exception ex) { LogCriticalError(ex, scanData); } } private async Task<ProcessingResult> ValidateAndProcessBarcodeAsync(string rawData) { // Implement smart caching for repeated scans if (BarcodeCache.TryGetCached(rawData, out var cachedResult)) { return cachedResult; } // Use IronBarcode with optimized settings var barcodeOptions = new BarcodeReaderOptions { Speed = ReadingSpeed.Balanced, ExpectMultipleBarcodes = false, ExpectBarcodeTypes = BarcodeEncoding.Code128 | BarcodeEncoding.QRCode, MaxParallelThreads = 1 // Single barcode, no need for parallel }; // Generate and validate var testBarcode = BarcodeWriter.CreateBarcode(rawData, BarcodeEncoding.Code128); var results = await BarcodeReader.ReadAsync(testBarcode.ToBitmap(), barcodeOptions); var result = new ProcessingResult { Success = results.Any(), BarcodeData = results.FirstOrDefault(), ProcessingTime = DateTime.UtcNow }; BarcodeCache.Add(rawData, result); return result; } } } Imports IronBarCode Imports System Imports System.Collections.Concurrent Imports System.Threading Imports System.Threading.Tasks Imports System.Windows.Forms Namespace EnterpriseBarcodeScanner Partial Public Class HighVolumeScanner Inherits Form Private ReadOnly _scanQueue As New ConcurrentQueue(Of ScanData)() Private ReadOnly _processingSemaphore As SemaphoreSlim Private ReadOnly _cancellationTokenSource As New CancellationTokenSource() Private _activeScanner As IScannerInput Private _maxConcurrentProcessing As Integer = Environment.ProcessorCount Public Sub New() InitializeComponent() _processingSemaphore = New SemaphoreSlim(_maxConcurrentProcessing) InitializeScanner() StartProcessingQueue() End Sub Private Sub InitializeScanner() ' Auto-detect scanner type If SerialPort.GetPortNames().Any(Function(p) p.Contains("COM")) Then _activeScanner = New SerialPortScanner("COM3", 115200) Else _activeScanner = New KeyboardWedgeScanner(txtScanner) End If AddHandler _activeScanner.BarcodeScanned, AddressOf OnBarcodeScanned _activeScanner.StartListening() End Sub Private Sub OnBarcodeScanned(sender As Object, barcode As String) ' Queue for async processing to maintain scanner responsiveness _scanQueue.Enqueue(New ScanData With { .RawData = barcode, .ScanTime = DateTime.UtcNow }) End Sub Private Async Sub StartProcessingQueue() While Not _cancellationTokenSource.Token.IsCancellationRequested Dim scanData As ScanData = Nothing If _scanQueue.TryDequeue(scanData) Then Await _processingSemaphore.WaitAsync() _ = Task.Run(Async Function() Try Await ProcessScanAsync(scanData) Finally _processingSemaphore.Release() End Try End Function, _cancellationTokenSource.Token) Else Await Task.Delay(10) ' Prevent CPU spinning End If End While End Sub Private Async Function ProcessScanAsync(scanData As ScanData) As Task Try ' Validate with timeout for performance Using cts As New CancellationTokenSource(TimeSpan.FromSeconds(2)) Dim validationTask = ValidateAndProcessBarcodeAsync(scanData.RawData) Dim completedTask = Await Task.WhenAny(validationTask, Task.Delay(Timeout.Infinite, cts.Token)) If completedTask Is validationTask Then Dim result = Await validationTask If result.Success Then ' Update UI thread-safe BeginInvoke(New Action(Sub() AddToInventory(result) GenerateLabelsIfNeeded(result) End Sub)) Else LogScanError(scanData, result.Error) End If Else LogScanTimeout(scanData) End If End Using Catch ex As Exception LogCriticalError(ex, scanData) End Try End Function Private Async Function ValidateAndProcessBarcodeAsync(rawData As String) As Task(Of ProcessingResult) ' Implement smart caching for repeated scans Dim cachedResult As ProcessingResult = Nothing If BarcodeCache.TryGetCached(rawData, cachedResult) Then Return cachedResult End If ' Use IronBarcode with optimized settings Dim barcodeOptions As New BarcodeReaderOptions With { .Speed = ReadingSpeed.Balanced, .ExpectMultipleBarcodes = False, .ExpectBarcodeTypes = BarcodeEncoding.Code128 Or BarcodeEncoding.QRCode, .MaxParallelThreads = 1 ' Single barcode, no need for parallel } ' Generate and validate Dim testBarcode = BarcodeWriter.CreateBarcode(rawData, BarcodeEncoding.Code128) Dim results = Await BarcodeReader.ReadAsync(testBarcode.ToBitmap(), barcodeOptions) Dim result As New ProcessingResult With { .Success = results.Any(), .BarcodeData = results.FirstOrDefault(), .ProcessingTime = DateTime.UtcNow } BarcodeCache.Add(rawData, result) Return result End Function End Class End Namespace $vbLabelText $csharpLabel パフォーマンスを向上させるには、特定の画像領域のスキャンに焦点を合わせるためにトリミング領域を実装します。 バーコード リーダーの設定により、さまざまなドキュメント タイプに合わせて微調整できます。 チームはどのようにフォールバックメカニズムを実装できますか? このエンタープライズ対応のスキャナー アプリケーションは、いくつかの重要なパターンを実装しています。 1.非同期キュー処理: 非同期操作を使用してUIのブロックを防止します 2.並行処理:複数のスレッドを使用して並列検証を行う 3.スマートキャッシング: 頻繁に使用されるアイテムの冗長処理を削減 4.パフォーマンス監視:読み取り速度オプションを使用してスキャン速度を追跡します 5.柔軟なスキャナサポート: 利用可能なハードウェアを自動検出 *無効なフォーマット:* BarcodeWriter がサポートされていないデータに遭遇したときに例外をキャッチします スキャナの切断:スキャナの取り外しを処理するために TextBox のフォーカス管理を実装します データ検証: IronBarcode のフォーマット固有のエンコードを使用してデータの互換性を確保します 生成の失敗:**バーコード生成をtry-catchブロックで囲む *タイムアウト処理:スキャナとキーボード入力を区別するためにキーストロークのタイミングを実装することを検討してください バーコード スキャナー プロジェクトの次のステップは何ですか? IronBarcode は、シンプルな USB バーコード スキャンをインテリジェントなデータ処理アプリケーションに変換します。 ハードウェア スキャナーの入力と IronBarcode の検証、生成、および形式変換機能を組み合わせることで、開発者はあらゆる業界向けの信頼性の高いスキャン ソリューションを構築できます。 ライブラリの非同期操作とマルチスレッドのサポートにより、拡大するビジネス ニーズに合わせてアプリケーションを拡張できます。 クラウド展開の場合、IronBarcode はAWS LambdaとAzure Functionsの優れたサポートを提供し、大規模なサーバーレスバーコード処理を可能にします。 このライブラリは、マイクロサービス アーキテクチャ用のDocker コンテナーとシームレスに統合されます。 エンタープライズ在庫システムを実装する場合は、次のアーキテクチャ パターンを考慮してください。 1.マイクロサービス: Docker 上の IronBarcodeを使用してスキャンを別のサービスとしてデプロイする 2.モバイル統合: AndroidおよびiOSをサポートするデバイスに拡張 Webアプリケーション: Blazor統合によるブラウザベースのスキャンの構築 4.高可用性:複数の読み取りオプションで冗長性を実装する 今すぐ無料トライアルを開始して、C# アプリケーションにプロフェッショナルなバーコード スキャンを実装してください。 関連機能については、バーコード スキャン ワークフローを補完するテキスト認識機能を備えたIronOCR をご覧ください。 よくある質問 IronBarcodeとは何であり、それはUSBバーコードスキャナーとどのように関連していますか? IronBarcodeは、USBバーコードスキャニングのための堅牢なC#アプリケーションを開発者が構築できるライブラリです。バーコード検証、データ抽出、およびバーコード生成などの機能を提供します。 IronBarcodeはUSBスキャナーからのバーコードデータを検証できますか? はい、IronBarcodeは、USBスキャナーからキャプチャしたバーコードデータを検証し、C#アプリケーションのデータ整合性と精度を確保します。 IronBarcodeはバーコード生成をどのように扱っていますか? IronBarcodeは、新しいバーコードをオンザフライで生成し、C#アプリケーション内で簡単にバーコードを作成し印刷できるようにします。 IronBarcodeにはUSBバーコードスキャニング用のエラーハンドリングサポートがありますか? はい、IronBarcodeには、USBバーコードスキャニングと処理中に発生する一般的な問題を管理するための包括的なエラーハンドリングが含まれています。 IronBarcodeを使用してスキャンできるバーコードの種類は何ですか? IronBarcodeはQRコード、UPC、Code 39など、多くのバーコードシンボロジーのスキャニングをサポートしており、さまざまなアプリケーションにおいて多用途です。 IronBarcodeはスキャンされたバーコードから構造化情報を抽出できますか? はい、IronBarcodeはスキャンされたバーコードから構造化情報を抽出し、効率的なデータ処理と管理を支援します。 C#でUSBバーコードスキャナーアプリケーションの構築を始めるにはどうすればいいですか? C#でUSBバーコードスキャナーアプリケーションの構築を始めるには、IronBarcodeと提供されたコード例とドキュメントを利用し、開発プロセスをガイドにします。 Jordi Bardia 今すぐエンジニアリングチームとチャット ソフトウェアエンジニア Jordiは、最も得意な言語がPython、C#、C++であり、Iron Softwareでそのスキルを発揮していない時は、ゲームプログラミングをしています。製品テスト、製品開発、研究の責任を分担し、Jordiは継続的な製品改善において多大な価値を追加しています。この多様な経験は彼を挑戦させ続け、興味を持たせており、Iron Softwareで働くことの好きな側面の一つだと言います。Jordiはフロリダ州マイアミで育ち、フロリダ大学でコンピュータサイエンスと統計学を学びました。 関連する記事 更新日 2026年1月22日 ASP.NETバーコードスキャナチュートリアル:C#バーコードジェネレータガイド IronBarcodeを使用してASP.NETでバーコードをスキャンする方法を学びます 詳しく読む 公開日 2026年1月21日 C#でのデータマトリクスジェネレータ:IronBarcodeによる完全ガイド データマトリックス生成C#チュートリアル。IronBarcodeでECC200データマトリックスバーコードを作成する方法を学びます。2Dバーコード生成のためのシンプルなコード例。 詳しく読む 公開日 2026年1月21日 IronBarcodeを使用したXamarinバーコードジェネレータでプロ品質のバーコードを作成する Xamarin Barcode Generatorを使用してプロ品質のバーコードを作成する方法を学びます。 詳しく読む ASP.NETバーコードスキャナチュートリアル:C#バーコードジェネレータガイドIronBarcodeを使用したXamarin...
更新日 2026年1月22日 ASP.NETバーコードスキャナチュートリアル:C#バーコードジェネレータガイド IronBarcodeを使用してASP.NETでバーコードをスキャンする方法を学びます 詳しく読む
公開日 2026年1月21日 C#でのデータマトリクスジェネレータ:IronBarcodeによる完全ガイド データマトリックス生成C#チュートリアル。IronBarcodeでECC200データマトリックスバーコードを作成する方法を学びます。2Dバーコード生成のためのシンプルなコード例。 詳しく読む
公開日 2026年1月21日 IronBarcodeを使用したXamarinバーコードジェネレータでプロ品質のバーコードを作成する Xamarin Barcode Generatorを使用してプロ品質のバーコードを作成する方法を学びます。 詳しく読む