IRONSOFTWAREHOME
IRONBARCODE VERWENDEN

C# USB-Barcodescanner: Erstellen Sie eine vollständige Scan-Anwendung

Curtis Chau
Curtis Chau
Updated: 28. Juni 2026

USB-Barcodescanner werden von C#-Anwendungen als Standard-Tastatureingabegeräte verwendet und senden die gescannten Daten als eingegebene Zeichen, gefolgt von einem Tastendruck auf die Eingabetaste. Dieses HID-Tastatur-Wedge-Verhalten macht die Integration unkompliziert – Ihre Anwendung empfängt Texteingaben ohne dass ein spezieller Treiber oder ein SDK erforderlich ist. IronBarcode verarbeitet diese Rohdaten, um Formate zu validieren, strukturierte Daten zu extrahieren und Antwort-Barcodes zu generieren. So wird aus einem einfachen Scanvorgang eine vollständige Datenpipeline für Bestandsverwaltung, Kassensysteme im Einzelhandel und Logistik-Tracking-Systeme.

Einzelhandel, Lagerhaltung und Fertigung – alle sind auf ein genaues und schnelles Scannen von Barcodes angewiesen. Wenn ein Entwickler einen USB-Scanner an eine Windows Forms- oder WPF-Anwendung anschließt, verhält sich der Scanner identisch zu einer Tastatur – die Daten kommen in einem Textfeld an, und das Drücken der Eingabetaste signalisiert, dass ein vollständiger Barcode empfangen wurde. Die Herausforderung besteht nicht in der Datenerfassung; Es wird korrekt verarbeitet. Die Barcode-Validierungsfunktion von IronBarcode prüft die Formatintegrität, extrahiert Felder wie Chargennummern oder GS1-Anwendungskennungen und kann daraufhin sofort einen neuen Barcode generieren .

Diese Anleitung führt Sie Schritt für Schritt durch die Entwicklung einer produktionsreifen C#-USB-Barcodescanner-Anwendung. Sie installieren die Bibliothek, erfassen Scannereingaben, validieren Barcode-Formate, generieren Antwortbezeichnungen und erstellen einen Prozessor für hohe Scanvolumen mit Warteschlangen. Jeder Abschnitt enthält vollständigen, ausführbaren Code, der auf .NET 10 abzielt und gegebenenfalls Top-Level-Anweisungen verwendet.

Wie arbeiten USB-Barcodescanner mit C#?

Warum vereinfacht der HID-Tastaturkeilmodus die Integration?

Die meisten USB-Barcodescanner werden standardmäßig im HID-Tastatur-Wedge-Modus ausgeliefert. Wenn Sie ein solches Gerät an einen Windows-Rechner anschließen, erkennt das Betriebssystem es sowohl als USB-Speichergerät (zur Konfiguration) als auch als Tastatur (zur Dateneingabe). Beim Scannen eines Barcodes übersetzt das Gerät den dekodierten Barcode-Wert in Tastatureingaben und sendet diese an das jeweilige Anwendungsfenster, das den Fokus hat, wobei am Ende ein Zeilenumbruch angehängt wird.

Aus der Sicht eines C#-Entwicklers bedeutet dies, dass keine herstellerspezifischen SDKs, COM-Bibliotheken oder spezielle USB-APIs benötigt werden. Ein Standard-TextBox-Steuerelement mit einem KeyDown-Handler genügt, um Eingaben zu erfassen. Die größte Herausforderung bei der Integration besteht darin, die Eingabe durch den Scanner von der tatsächlichen Tastatureingabe zu unterscheiden. Scanner liefern typischerweise alle Zeichen in einem sehr kurzen Moment – ​​oft unter 50 Millisekunden –, während menschliches Tippen die Tastenanschläge über Hunderte von Millisekunden verteilt. Das Timing der Tastenanschläge ist eine zuverlässige Methode, um versehentliche Tastendrücke herauszufiltern.

Professionelle Scanner unterstützen außerdem serielle Schnittstellen (RS-232 oder virtueller COM-Port) und direkte USB-HID-Modi, die Ihnen mehr Kontrolle über Präfix-/Suffixzeichen und Scan-Trigger geben. Das untenstehende Schnittstellenmuster behandelt beide Fälle:

public interface IScannerInput
{
    event EventHandler<string> BarcodeScanned;
    void StartListening();
    void StopListening();
}

public class KeyboardWedgeScanner : IScannerInput
{
    public event EventHandler<string> BarcodeScanned;
    private readonly TextBox _inputBox;
    private readonly System.Windows.Forms.Timer _burstTimer;
    private readonly System.Text.StringBuilder _buffer = new();

    public KeyboardWedgeScanner(TextBox inputBox)
    {
        _inputBox = inputBox;
        _burstTimer = new System.Windows.Forms.Timer { Interval = 80 };
        _burstTimer.Tick += OnBurstTimeout;
        _inputBox.KeyPress += OnKeyPress;
    }

    private void OnKeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.Enter)
        {
            _burstTimer.Stop();
            string value = _buffer.ToString().Trim();
            _buffer.Clear();
            if (value.Length > 0)
                BarcodeScanned?.Invoke(this, value);
        }
        else
        {
            _buffer.Append(e.KeyChar);
            _burstTimer.Stop();
            _burstTimer.Start();
        }
        e.Handled = true;
    }

    private void OnBurstTimeout(object sender, EventArgs e)
    {
        _burstTimer.Stop();
        _buffer.Clear(); // incomplete burst -- discard
    }

    public void StartListening() => _inputBox.Focus();
    public void StopListening() => _inputBox.Enabled = false;
}

public class SerialPortScanner : IScannerInput
{
    public event EventHandler<string> BarcodeScanned;
    private readonly 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();
        if (data.Length > 0)
            BarcodeScanned?.Invoke(this, data);
    }

    public void StartListening() => _port.Open();
    public void StopListening() => _port.Close();
}

Der entscheidende Punkt ist der Burst-Timer in der Tastatur-Wedge-Implementierung. Es wird bei jedem Tastendruck zurückgesetzt und nur ausgelöst, wenn keine Zeichen mehr eintreffen – das bedeutet, dass bei echten Tastaturbenutzern, die langsam tippen, die unvollständige Eingabe verworfen und nicht wie ein Barcode-Scan behandelt wird.

Wie handhabt man verschiedene Scannermarken?

In Enterprise werden häufig verschiedene Scanner von Honeywell, Zebra (ehemals Symbol/Motorola) und Datalogic auf derselben Etage eingesetzt. Jeder Anbieter hat seine eigenen Standard-Abschlusszeichen, Baudraten und Präfix-/Suffixkonventionen. Ein Konfigurationsmodell sorgt für Flexibilität Ihrer Anwendung:

public class ScannerConfiguration
{
    public string ScannerType { get; set; } = "KeyboardWedge";
    public string PortName { get; set; } = "COM3";
    public int BaudRate { get; set; } = 9600;
    public string Terminator { get; set; } = "\r\n";
    public bool EnableBeep { get; set; } = true;
    public Dictionary<string, string> BrandSettings { get; set; } = new();

    public static ScannerConfiguration GetHoneywellConfig() => new()
    {
        ScannerType = "Serial",
        BaudRate = 115200,
        BrandSettings = new Dictionary<string, string>
        {
            { "Prefix", "STX" },
            { "Suffix", "ETX" },
            { "TriggerMode", "Manual" }
        }
    };

    public static ScannerConfiguration GetZebraConfig() => new()
    {
        ScannerType = "KeyboardWedge",
        BrandSettings = new Dictionary<string, string>
        {
            { "ScanMode", "Continuous" },
            { "BeepVolume", "High" }
        }
    };
}

Durch das Speichern dieser Konfigurationen in einer Einstellungsdatei oder Datenbank können die Lagermitarbeiter die Scannermodelle austauschen, ohne dass eine erneute Bereitstellung erforderlich ist. Das ScannerType-Feld bestimmt, welche IScannerInput-Implementierung beim Start instanziiert wird.

Wie installiert man IronBarcode in einem C#-Projekt?

Wie kann IronBarcode am schnellsten über NuGet hinzugefügt werden?

Öffnen Sie die Paketmanager-Konsole in Visual Studio und führen Sie den Befehl aus:

PM > Install-Package BarCode

Alternativ können Sie die .NET -Befehlszeilenschnittstelle verwenden:

dotnet add package BarCode

Beide Befehle laden die aktuelle Version von NuGet herunter und fügen den Assemblyverweis zu Ihrer Projektdatei hinzu. Die Bibliothek ist für .NET Standard 2.0 ausgelegt und funktioniert daher ohne zusätzliche Kompatibilitätsschnittstellen unter .NET Framework 4.6.2 bis .NET 10.

Nach der Installation müssen Sie Ihren Lizenzschlüssel festlegen, bevor Sie eine beliebige IronBarcode -Methode aufrufen. Für Entwicklungs- und Evaluierungszwecke ist ein kostenloser Testschlüssel auf derIronBarcode -Lizenzseite erhältlich:

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

Für containerisierte Bereitstellungen arbeitet IronBarcode mit Docker unter Linux zusammen , und für Cloud-Funktionen unterstützt es AWS Lambda und Azure Functions .

Wie validiert man gescannte Barcodes mit IronBarcode?

Welcher Ansatz ist für die Formatverifizierung der richtige?

IronBarcode unterstützt über 30 Barcode-Symbologien, darunter Code 128 , EAN-13 , Code 39 , QR-Codes und Data Matrix . Bei USB-Scanneranwendungen wird die gescannte Zeichenkette durch das Validierungsmuster als Barcode-Bild neu codiert und sofort wieder durch den Decoder eingelesen. Dieser Roundtrip bestätigt, dass die Zeichenkette ein gültiger Wert für das angegebene Format ist:

public class BarcodeValidator
{
    public async Task<ValidationResult> ValidateAsync(string scannedText, BarcodeEncoding preferredFormat = BarcodeEncoding.Code128)
    {
        var result = new ValidationResult { RawInput = scannedText };

        try
        {
            var barcode = BarcodeWriter.CreateBarcode(scannedText, preferredFormat);
            var readResults = await BarcodeReader.ReadAsync(barcode.ToBitmap());

            if (readResults.Any())
            {
                var first = readResults.First();
                result.IsValid = true;
                result.Format = first.BarcodeType;
                result.Value = first.Value;
                result.Confidence = first.Confidence;
            }
            else
            {
                result.IsValid = false;
                result.Error = "No barcode could be decoded from the scanned input.";
            }
        }
        catch (Exception ex)
        {
            result.IsValid = false;
            result.Error = ex.Message;
        }

        return result;
    }
}

public record ValidationResult
{
    public string RawInput { get; init; } = "";
    public bool IsValid { get; set; }
    public BarcodeEncoding Format { get; set; }
    public string Value { get; set; } = "";
    public float Confidence { get; set; }
    public string Error { get; set; } = "";
}

Für GS1-128-Barcodes, die in Lieferkettenanwendungen verwendet werden, enthält der gescannte String Anwendungskennung-Präfixe in Klammern, wie (01) für GTIN und (17) für das Ablaufdatum. IronBarcode parst diese Anwendungskennungen automatisch, wenn Sie BarcodeEncoding.GS1_128 angeben.

Welche EAN-13-Prüfsummenlogik sollten Entwickler implementieren?

Kassensysteme im Einzelhandel müssen häufig die Prüfziffern der EAN-13-Nummer separat verifizieren, bevor der Wert an eine Preisabfrage übergeben wird. Die Luhn-Prüfsumme für EAN-13 verwendet abwechselnd die Gewichtungen 1 und 3 für die ersten 12 Ziffern.

public static bool ValidateEan13Checksum(string value)
{
    if (value.Length != 13 || !value.All(char.IsDigit))
        return false;

    int sum = 0;
    for (int i = 0; i < 12; i++)
    {
        int digit = value[i] - '0';
        sum += (i % 2 == 0) ? digit : digit * 3;
    }

    int expectedCheck = (10 - (sum % 10)) % 10;
    return expectedCheck == (value[12] - '0');
}

Diese rein logische Prüfung wird vor der Kodierung durchgeführt, um den Aufwand der Bildgenerierung für jeden Scan in einer Einzelhandelsumgebung mit hohem Durchsatz zu vermeiden. Gemäß der GS1-Spezifikation ist der Prüfziffernalgorithmus für UPC-A (12 Ziffern) identisch, wenn man die führende Null weglässt.

Wie generiert man Antwort-Barcodes aus gescannten Eingaben?

Wann sollte eine Anwendung nach einem Scan neue Barcodes erstellen?

Ein gängiges Muster bei der Warenannahme im Lager ist der Arbeitsablauf "Scannen und Neuetikettieren": Ein eingehender Artikel trägt einen Lieferanten-Barcode (oft EAN-13 oder ITF-14), und das Lagerverwaltungssystem muss ein internes Code-128-Etikett mit eigenen Standort- und Chargencodes drucken. Die Generierungsfunktionen von IronBarcode erledigen dies in wenigen Zeilen:

public class InventoryLabelGenerator
{
    private readonly string _outputDirectory;

    public InventoryLabelGenerator(string outputDirectory)
    {
        _outputDirectory = outputDirectory;
        Directory.CreateDirectory(_outputDirectory);
    }

    public async Task<string> GenerateLabelAsync(string internalCode, string locationCode)
    {
        string fullCode = $"{internalCode}|{locationCode}|{DateTime.UtcNow:yyyyMMdd}";

        // Primary Code 128 label for scanners
        var linearBarcode = BarcodeWriter.CreateBarcode(fullCode, BarcodeEncoding.Code128);
        linearBarcode.ResizeTo(500, 140);
        linearBarcode.SetMargins(12);
        linearBarcode.AddAnnotationTextAboveBarcode(fullCode);
        linearBarcode.ChangeBarCodeColor(IronSoftware.Drawing.Color.Black);

        // QR code companion for mobile apps
        var qrCode = BarcodeWriter.CreateQrCode(fullCode);
        qrCode.ResizeTo(200, 200);
        qrCode.SetMargins(8);

        string timestamp = DateTime.UtcNow.ToString("yyyyMMddHHmmss");
        string pngPath = Path.Combine(_outputDirectory, $"{internalCode}_{timestamp}.png");
        string pdfPath = Path.Combine(_outputDirectory, $"{internalCode}_{timestamp}.pdf");

        await Task.Run(() =>
        {
            linearBarcode.SaveAsPng(pngPath);
            linearBarcode.SaveAsPdf(pdfPath);
        });

        return pngPath;
    }
}

Das Speichern als PDF ist besonders nützlich für Etikettendrucker, die PDF-Eingaben über eine Netzwerkfreigabe akzeptieren. Sie können auch als SVG exportieren, um qualitativ hochwertige Thermodrucketiketten auszugeben, oder als Byte-Stream exportieren, um ihn direkt an eine Etikettendrucker-API zu senden.

IronBarcode unterstützt umfangreiche Stilanpassungen, darunter benutzerdefinierte Farben, Randanpassungen , lesbare Textüberlagerungen und, bei QR-Codes, die Einbettung von Logos für markengekennzeichnete mobile Etiketten.

![Windows Forms-Anwendungsoberfläche, die die Dual-Barcode-Generierungsfunktionen von IronBarcode demonstriert. Die Benutzeroberfläche zeigt die erfolgreiche Generierung sowohl eines linearen Code-128-Barcodes als auch eines QR-Codes für die Inventarnummer "INV-20250917-helloworld". Über das Eingabefeld oben können Benutzer benutzerdefinierte Inventarcodes eingeben. Mit der Schaltfläche "Generieren" lassen sich die Barcodes erstellen. Die Erfolgsmeldung "Element erfolgreich verarbeitet – Etiketten generiert" bestätigt den Abschluss des Vorgangs. Der Code-128-Barcode ist als primäres Format für die Bestandsverfolgung gekennzeichnet, während der darunter stehende QR-Code als mobile Alternative dient. Die Anwendung verwendet einen Professional grauen Hintergrund mit klarer visueller Hierarchie und demonstriert, wie IronBarcode Entwicklern die Erstellung von Barcode-Generierungssystemen für verschiedene Formate zur umfassenden Bestandsverwaltung ermöglicht.

Wie entwickelt man eine vollständige Anwendung zum Scannen großer Datenmengen?

Wie sieht eine Implementierung auf Basis einer Produktionswarteschlange aus?

Bei Anwendungen, die Dutzende von Scans pro Minute verarbeiten, wird ein einfacher synchroner Handler im UI-Thread zum Flaschenhals. Mithilfe des unten gezeigten Musters wird die Erfassung des Scans von der Verarbeitung entkoppelt, indem ein ConcurrentQueue<t> und eine Hintergrundverarbeitungsschleife verwendet werden. Die asynchrone API von IronBarcode übernimmt die Validierung, ohne die Benutzeroberfläche zu blockieren:

using IronBarCode;
using System.Collections.Concurrent;

public partial class HighVolumeScanner : Form
{
    private readonly ConcurrentQueue<(string Data, DateTime Timestamp)> _scanQueue = new();
    private readonly SemaphoreSlim _semaphore;
    private readonly CancellationTokenSource _cts = new();
    private IScannerInput _scanner;

    public HighVolumeScanner()
    {
        InitializeComponent();
        IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
        _semaphore = new SemaphoreSlim(Environment.ProcessorCount);
        InitializeScanner();
        _ = RunProcessingLoopAsync();
    }

    private void InitializeScanner()
    {
        _scanner = System.IO.Ports.SerialPort.GetPortNames().Any()
            ? new SerialPortScanner("COM3", 115200)
            : new KeyboardWedgeScanner(txtScannerInput);

        _scanner.BarcodeScanned += (_, barcode) =>
            _scanQueue.Enqueue((barcode, DateTime.UtcNow));

        _scanner.StartListening();
    }

    private async Task RunProcessingLoopAsync()
    {
        while (!_cts.Token.IsCancellationRequested)
        {
            if (_scanQueue.TryDequeue(out var scan))
            {
                await _semaphore.WaitAsync(_cts.Token);
                _ = Task.Run(async () =>
                {
                    try { await ProcessScanAsync(scan.Data, scan.Timestamp); }
                    finally { _semaphore.Release(); }
                }, _cts.Token);
            }
            else
            {
                await Task.Delay(10, _cts.Token);
            }
        }
    }

    private async Task ProcessScanAsync(string rawData, DateTime scanTime)
    {
        var options = new BarcodeReaderOptions
        {
            Speed = ReadingSpeed.Ausgewogen,
            ExpectMultipleBarcodes = false,
            ExpectBarcodeTypes = BarcodeEncoding.Code128 | BarcodeEncoding.QRCode,
            MaxParallelThreads = 1
        };

        var testBarcode = BarcodeWriter.CreateBarcode(rawData, BarcodeEncoding.Code128);
        var results = await BarcodeReader.ReadAsync(testBarcode.ToBitmap(), options);

        if (results.Any())
        {
            var item = results.First();
            BeginInvoke(() => UpdateInventoryDisplay(item.Value, scanTime));
        }
        else
        {
            BeginInvoke(() => LogRejectedScan(rawData, scanTime));
        }
    }

    protected override void OnFormClosing(FormClosingEventArgs e)
    {
        _cts.Cancel();
        _scanner.StopListening();
        base.OnFormClosing(e);
    }
}
C#

Die SemaphoreSlim begrenzt gleichzeitige Validierungsaufgaben auf die Anzahl der logischen Prozessoren, um eine unkontrollierte Thread-Erstellung bei Burst-Scan-Ereignissen zu verhindern. Die BeginInvoke-Aufrufe schleusen UI-Updates sicher zurück in den Haupt-Thread.

Wie optimiert man die Leistung für unterschiedliche Scanvolumina?

Die BarcodeReaderOptions.Speed-Eigenschaft akzeptiert ReadingSpeed.Faster, ReadingSpeed.Balanced und ReadingSpeed.Detailed. Für USB-Scanner-Eingaben, bei denen der Stringwert bereits bekannt ist, ist Balanced geeignet – der Decoder muss nur das Format bestätigen und nicht einen Barcode in einem Bild finden. Laut IronBarcode's Lesegeschwindigkeitsdokumentation überspringt der Faster-Modus einige Verzerrungskorrekturalgorithmen, was für sauberen Scannerausgang sicher ist, aber möglicherweise beschädigte Barcodes in bildbasierten Szenarien übersieht.

Die folgende Tabelle fasst zusammen, wann welcher Geschwindigkeitsmodus verwendet werden sollte:

Lesegeschwindigkeitsmodi von IronBarcode und ihre jeweiligen Anwendungsfälle
GeschwindigkeitsmodusAm besten fürAbtausch
SchnellerSauberer USB-Scannereingang, hoher DurchsatzKann stark beschädigte oder schiefe Barcodes nicht erkennen
AusgewogenGemischte Eingabe – USB-Scanner Plus BildimporteMäßige CPU-Auslastung, gute Genauigkeit
AusführlichBeschädigte Etiketten, kontrastarmer Druck, PDF-ImporteHöhere CPU-Auslastung, geringster Durchsatz

Für Anwendungen, die neben USB-Scannereingaben auch Bilder oder PDFs verarbeiten, kann IronBarcode Barcodes aus PDF-Dokumenten und mehrseitigen TIFF-Dateien über dieselbe API-Schnittstelle IronBarcode .

Professional Windows Forms Barcode-Scanner-Anwendung, die die Echtzeit-Inventarverfolgungsfunktionen von IronBarcode demonstriert. Die Benutzeroberfläche zeichnet sich durch ein übersichtliches Zwei-Panel-Design mit einer eleganten dunkelblauen Kopfzeile aus. Im linken Bereich wird eine Scanverlaufsliste angezeigt, die vier erfolgreich gescannte Inventarartikel (INV-001 bis INV-004) mit genauen Zeitstempeln und Scanstatusanzeigen anzeigt. Jeder Artikel enthält detaillierte Metadaten wie Barcode-Typ und Konfidenzniveau. Im rechten Bereich wird ein dynamisch generierter Zusammenfassungs-Barcode angezeigt, der "Artikel: 4" mit Professional Styling und korrekten Rändern anzeigt. Die Aktionsschaltflächen am unteren Rand umfassen "Liste löschen", "Daten exportieren" und "Etiketten drucken" für eine vollständige Bestandsverwaltung. Die Statusleiste zeigt "Scanner: Verbunden" an. | Modus: Kontinuierlich | Letzter Scan: vor 2 Sekunden", was die Echtzeit-Überwachungsfunktionen der Anwendung und das Professional , unternehmensgerechte Design demonstriert, das IronBarcode für Produktionsinventursysteme ermöglicht.

Wie geht man mit Sonderfällen und Fehlern in Scanneranwendungen um?

Welche Fehlerszenarien sollten Entwickler erwarten?

USB-Scanner-Anwendungen versagen auf vorhersehbare Weise. Die häufigsten Probleme und ihre Abhilfemaßnahmen sind:

Scannerverbindung unterbrochen - Wenn ein USB-Scanner ausgesteckt wird, verliert das Tastatur-Wedge-TextBox seine virtuelle Tastatur. Die einfachste Abhilfe ist ein periodischer Timer, der _inputBox.Focused überprüft und ihn neu fokussiert, wenn der Scanner noch in den verbundenen HID-Geräten angezeigt wird. Für serielle Scanner erkennt SerialPort.GetPortNames() die Wiederverbindung.

Mehrdeutige Barcode-Formate – Einige Produkte tragen Barcodes, die in mehreren Symbologien gültig sind. Ein Beispiel: Ein 12-stelliger String ist sowohl ein gültiger UPC-A als auch ein gültiger Code 128. Die Angabe von ExpectBarcodeTypes in BarcodeReaderOptions beschränkt den Decoder auf Ihre erwarteten Formate und beseitigt Mehrdeutigkeiten. Der IronBarcode Leitfaden zur Fehlerbehebung enthält formatspezifische Erkennungstipps.

Ungültige Formatausnahmen -- Wenn BarcodeWriter.CreateBarcode einen String erhält, der gegen die Regeln der ausgewählten Codierung verstößt (zum Beispiel alphabetische Zeichen in einem numerischen EAN-13-Feld), wird eine IronBarCode.Exceptions.InvalidBarcodeException-Ausnahme ausgelöst. Durch das Einbetten des Aufrufs in einen try-catch-Block und den Rückgriff auf einen Validierungspfad, der nur Zeichenketten zulässt, kann die Anwendung weiterlaufen.

Kollisionen der Tastenanschlagzeiten – In Umgebungen, in denen die Bediener auch manuell in dasselbe Textfeld tippen, ist der zuvor beschriebene Burst-Timer-Ansatz die primäre Verteidigungsmethode. Eine weitere Schutzmaßnahme ist die Mindestlänge: Die meisten realen Barcodes bestehen aus mindestens 8 Zeichen, daher können kürzere Zeichenketten als Tastatureingabe behandelt werden.

Die Microsoft .NET-Dokumentation zu System.IO.Ports.SerialPort ist nützlich, wenn Sie Probleme mit der seriellen Scanner-Konnektivität beheben, insbesondere im Zusammenhang mit den Einstellungen von ReadTimeout und WriteTimeout. Zur Einhaltung gesetzlicher Vorschriften im Einzelhandel definieren die GS1 General Specifications gültige Wertebereiche für jede Anwendungskennung.

Wie lässt sich die Anwendung auf mobile und Web-Plattformen erweitern?

Das oben gezeigte Scanner-Schnittstellenmuster - IScannerInput mit BarcodeScanned-Ereignis - abstrahiert die Hardware von der Verarbeitung. Durch den Austausch der Implementierungen kann derselbe Validierungs- und Generierungscode auf verschiedenen Plattformen ausgeführt werden:

  • .NET MAUI bietet eine kamerabasierte Scanner-Implementierung für Android- und iOS-Tablets, die als mobile Empfangsstationen verwendet werden.
  • Blazor Server unterstützt das browserbasierte Scannen mit JavaScript-Kamerazugriff, der in das gleiche BarcodeScanned-Ereignis eingespeist wird.
  • Native Implementierungen für Android und iOS bieten mobilen Entwicklern die Möglichkeit, mit der Kamera zu scannen, wobei im Backend derselbe IronBarcode -Decoder verwendet wird.

Bei Cloud-nativen Architekturen können die Validierungs- und Labelgenerierungsschritte als Azure Functions ausgeführt werden, die durch Warteschlangennachrichten ausgelöst werden, wobei die Desktop-Anwendung lediglich als Eingabegateway für den Scanner fungiert. Diese Trennung ist besonders dann nützlich, wenn die Logik für den Etikettendruck im Rahmen von Compliance-Audits zentralisiert werden muss.

Was sind Ihre nächsten Schritte?

Die Entwicklung einer USB-Barcode-Scanner-Anwendung mit IronBarcode umfasst vier konkrete Schritte: Erfassung der Tastatureingabe mittels Burst-Timing-Erkennung, Validierung des gescannten Werts durch den Decoder von IronBarcode, Generierung von Antwortbezeichnungen im erforderlichen Format und Verarbeitung großer Scanvolumina mit einer parallelen Warteschlange. Jede Phase ist unabhängig und kann isoliert getestet werden.

Erwägen Sie von hier aus, die Anwendung um das Lesen mehrerer Barcodes für Stapelverarbeitungsszenarien, die Optimierung des Bildausschnitts für bildbasierte Eingaben oder die Unterstützung von MSI-Barcodes für ältere Lagertechnik zu erweitern. Die IronBarcode Dokumentation umfasst alle unterstützten Formate und erweiterte Konfigurationsoptionen für das Lesegerät.

Starten Sie eine kostenlose Testphase , um einen Entwicklerlizenzschlüssel zu erhalten und IronBarcode noch heute in Ihre Scan-Anwendung zu integrieren.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender Handbücher.

...
Weiterlesen

Verwandte Artikel

Key in blue circle

Holen Sie sich sofort Ihren kostenlosen 30-Tage-Testschlüssel.

Your trial license will be sent to your email address

Keine Einschränkungen. 100 % freigeschaltet. Keine Kreditkarte.

bullet_checkedIhr Testlizenzschlüssel wurde Ihnen per E-Mail gesendet.Keine Einschränkungen. 100 % freigeschaltet. Keine Kreditkarte.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
AWS-Logo
Booking Badge

Von Millionen von Ingenieur*innen weltweit vertraut

Azure (WebApps, Funktionen v3)
Erhalten Sie Ihre unverbindliche Beratung
Füllen Sie das Formular unten aus oder senden Sie eine E-Mail an sales@ironsoftware.com
Ihre Daten werden immer vertraulich behandelt.
Von Millionen von Ingenieur*innen weltweit vertraut
Azure (WebApps, Funktionen v3)
Erhalten Sie sofort Ihren kostenlosen 30-Tage-Testschlüssel.
Ihr Testlizenzschlüssel wurde Ihnen per E-Mail gesendet.