using IronQr;using IronSoftware.Drawing;var input = new QrImageInput(AnyBitmap.FromFile("ticket.png"));IEnumerable<QrResult> results = await new QrReader().ReadAsync(input);Console.WriteLine(results.First().Value);
using IronQr;
using IronSoftware.Drawing;
var input = new QrImageInput(AnyBitmap.FromFile("ticket.png"));
IEnumerable<QrResult> results = await new QrReader().ReadAsync(input);
Console.WriteLine(results.First().Value);
ImportsIronQrImportsIronSoftware.DrawingDim input = New QrImageInput(AnyBitmap.FromFile("ticket.png"))Dim results AsIEnumerable(OfQrResult) = Await New QrReader().ReadAsync(input)Console.WriteLine(results.First().Value)
Imports IronQr
Imports IronSoftware.Drawing
Dim input = New QrImageInput(AnyBitmap.FromFile("ticket.png"))
Dim results As IEnumerable(Of QrResult) = Await New QrReader().ReadAsync(input)
Console.WriteLine(results.First().Value)
using IronQr;using IronQr.Enum;using IronSoftware.Drawing;// --- Async read: non-blocking QR decode ---var inputBmp = AnyBitmap.FromFile("event-badge.png");var imageInput = new QrImageInput(inputBmp, QrScanMode.Auto);var reader = new QrReader();IEnumerable<QrResult> results = await reader.ReadAsync(imageInput);foreach (QrResult result in results){Console.WriteLine($"[{result.QrType}] {result.Value}");}// --- Async-wrapped save: QrWriter.Write() and QrCode.Save() are synchronous ---QrCode qrCode = QrWriter.Write("https://ironsoftware.com");AnyBitmap qrImage = qrCode.Save();// Save the bitmap bytes asynchronously (not an IronQR API — standard .NET async I/O)byte[] pngBytes = qrImage.ExportBytes();awaitFile.WriteAllBytesAsync("output-qr.png", pngBytes);
using IronQr;
using IronQr.Enum;
using IronSoftware.Drawing;
// --- Async read: non-blocking QR decode ---
var inputBmp = AnyBitmap.FromFile("event-badge.png");
var imageInput = new QrImageInput(inputBmp, QrScanMode.Auto);
var reader = new QrReader();
IEnumerable<QrResult> results = await reader.ReadAsync(imageInput);
foreach (QrResult result in results)
{
Console.WriteLine($"[{result.QrType}] {result.Value}");
}
// --- Async-wrapped save: QrWriter.Write() and QrCode.Save() are synchronous ---
QrCode qrCode = QrWriter.Write("https://ironsoftware.com");
AnyBitmap qrImage = qrCode.Save();
// Save the bitmap bytes asynchronously (not an IronQR API — standard .NET async I/O)
byte[] pngBytes = qrImage.ExportBytes();
await File.WriteAllBytesAsync("output-qr.png", pngBytes);
ImportsIronQrImportsIronQr.EnumImportsIronSoftware.DrawingImportsSystem.IO' --- Async read: non-blocking QR decode ---Dim inputBmp = AnyBitmap.FromFile("event-badge.png")Dim imageInput = New QrImageInput(inputBmp, QrScanMode.Auto)Dim reader = New QrReader()Dim results AsIEnumerable(OfQrResult) = Await reader.ReadAsync(imageInput)For Each result AsQrResultIn resultsConsole.WriteLine($"[{result.QrType}] {result.Value}")Next' --- Async-wrapped save: QrWriter.Write() and QrCode.Save() are synchronous ---Dim qrCode AsQrCode = QrWriter.Write("https://ironsoftware.com")Dim qrImage AsAnyBitmap = qrCode.Save()' Save the bitmap bytes asynchronously (not an IronQR API — standard .NET async I/O)Dim pngBytes AsByte() = qrImage.ExportBytes()AwaitFile.WriteAllBytesAsync("output-qr.png", pngBytes)
Imports IronQr
Imports IronQr.Enum
Imports IronSoftware.Drawing
Imports System.IO
' --- Async read: non-blocking QR decode ---
Dim inputBmp = AnyBitmap.FromFile("event-badge.png")
Dim imageInput = New QrImageInput(inputBmp, QrScanMode.Auto)
Dim reader = New QrReader()
Dim results As IEnumerable(Of QrResult) = Await reader.ReadAsync(imageInput)
For Each result As QrResult In results
Console.WriteLine($"[{result.QrType}] {result.Value}")
Next
' --- Async-wrapped save: QrWriter.Write() and QrCode.Save() are synchronous ---
Dim qrCode As QrCode = QrWriter.Write("https://ironsoftware.com")
Dim qrImage As AnyBitmap = qrCode.Save()
' Save the bitmap bytes asynchronously (not an IronQR API — standard .NET async I/O)
Dim pngBytes As Byte() = qrImage.ExportBytes()
Await File.WriteAllBytesAsync("output-qr.png", pngBytes)
using IronQr;using IronQr.Enum;using IronSoftware.Drawing;using System.Collections.Concurrent;using System.Diagnostics;string[] files = Directory.GetFiles("qr-images/", "*.png");var allResults = new ConcurrentBag<(stringFile, stringValue)>();int failCount = 0;var sw = Stopwatch.StartNew();Parallel.ForEach(files, new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }, file =>{ try { var input = new QrImageInput(AnyBitmap.FromFile(file),QrScanMode.Auto); // Per-thread QrReader instance — safe default var results = new QrReader().Read(input); foreach (QrResult result in results) { allResults.Add((Path.GetFileName(file), result.Value)); } } catch (Exception ex) {Interlocked.Increment(ref failCount);Console.Error.WriteLine($"[ERROR] {Path.GetFileName(file)}: {ex.Message}"); }});sw.Stop();Console.WriteLine($"Processed {files.Length} files in {sw.Elapsed.TotalSeconds:F1}s");Console.WriteLine($"QR codes found: {allResults.Count} | Failures: {failCount}");Console.WriteLine($"Throughput: {files.Length / sw.Elapsed.TotalSeconds:F1} files/sec");
using IronQr;
using IronQr.Enum;
using IronSoftware.Drawing;
using System.Collections.Concurrent;
using System.Diagnostics;
string[] files = Directory.GetFiles("qr-images/", "*.png");
var allResults = new ConcurrentBag<(string File, string Value)>();
int failCount = 0;
var sw = Stopwatch.StartNew();
Parallel.ForEach(files, new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }, file =>
{
try
{
var input = new QrImageInput(
AnyBitmap.FromFile(file),
QrScanMode.Auto);
// Per-thread QrReader instance — safe default
var results = new QrReader().Read(input);
foreach (QrResult result in results)
{
allResults.Add((Path.GetFileName(file), result.Value));
}
}
catch (Exception ex)
{
Interlocked.Increment(ref failCount);
Console.Error.WriteLine($"[ERROR] {Path.GetFileName(file)}: {ex.Message}");
}
});
sw.Stop();
Console.WriteLine($"Processed {files.Length} files in {sw.Elapsed.TotalSeconds:F1}s");
Console.WriteLine($"QR codes found: {allResults.Count} | Failures: {failCount}");
Console.WriteLine($"Throughput: {files.Length / sw.Elapsed.TotalSeconds:F1} files/sec");
ImportsIronQrImportsIronQr.EnumImportsIronSoftware.DrawingImportsSystem.Collections.ConcurrentImportsSystem.DiagnosticsDim files AsString() = Directory.GetFiles("qr-images/", "*.png")Dim allResults As New ConcurrentBag(Of (FileAsString, ValueAsString))()Dim failCount AsInteger = 0Dim sw = Stopwatch.StartNew()Parallel.ForEach(files, New ParallelOptionsWith {.MaxDegreeOfParallelism = Environment.ProcessorCount}, Sub(file)Try Dim input = New QrImageInput(AnyBitmap.FromFile(file), QrScanMode.Auto) ' Per-thread QrReader instance — safe default Dim results = New QrReader().Read(input) For Each result AsQrResultIn results allResults.Add((Path.GetFileName(file), result.Value)) NextCatch ex AsExceptionInterlocked.Increment(failCount)Console.Error.WriteLine($"[ERROR] {Path.GetFileName(file)}: {ex.Message}")EndTryEnd Sub)sw.Stop()Console.WriteLine($"Processed {files.Length} files in {sw.Elapsed.TotalSeconds:F1}s")Console.WriteLine($"QR codes found: {allResults.Count} | Failures: {failCount}")Console.WriteLine($"Throughput: {files.Length / sw.Elapsed.TotalSeconds:F1} files/sec")
Imports IronQr
Imports IronQr.Enum
Imports IronSoftware.Drawing
Imports System.Collections.Concurrent
Imports System.Diagnostics
Dim files As String() = Directory.GetFiles("qr-images/", "*.png")
Dim allResults As New ConcurrentBag(Of (File As String, Value As String))()
Dim failCount As Integer = 0
Dim sw = Stopwatch.StartNew()
Parallel.ForEach(files, New ParallelOptions With {.MaxDegreeOfParallelism = Environment.ProcessorCount}, Sub(file)
Try
Dim input = New QrImageInput(AnyBitmap.FromFile(file), QrScanMode.Auto)
' Per-thread QrReader instance — safe default
Dim results = New QrReader().Read(input)
For Each result As QrResult In results
allResults.Add((Path.GetFileName(file), result.Value))
Next
Catch ex As Exception
Interlocked.Increment(failCount)
Console.Error.WriteLine($"[ERROR] {Path.GetFileName(file)}: {ex.Message}")
End Try
End Sub)
sw.Stop()
Console.WriteLine($"Processed {files.Length} files in {sw.Elapsed.TotalSeconds:F1}s")
Console.WriteLine($"QR codes found: {allResults.Count} | Failures: {failCount}")
Console.WriteLine($"Throughput: {files.Length / sw.Elapsed.TotalSeconds:F1} files/sec")
using IronQr;using IronQr.Enum;using IronSoftware.Drawing;using System;using System.Collections.Concurrent;using System.Diagnostics;using System.IO;using System.Linq;using System.Threading;using System.Threading.Tasks;string[] files = Directory.GetFiles("high-volume/", "*.png");var results = new ConcurrentBag<(stringFile, stringValue)>();int maxConcurrency = Environment.ProcessorCount;using var semaphore = new SemaphoreSlim(maxConcurrency);var sw = Stopwatch.StartNew();var tasks = files.Select(async file =>{ await semaphore.WaitAsync(); try { var bmp = AnyBitmap.FromFile(file); // Auto: runs ML detection plus a basic scan so result.Value is populated var input = new QrImageInput(bmp, QrScanMode.Auto); var qrResults = await new QrReader().ReadAsync(input); foreach (var qr in qrResults) { results.Add((Path.GetFileName(file), qr.Value)); } } catch (Exception ex) {Console.Error.WriteLine($"{{\"file\":\"{Path.GetFileName(file)}\",\"error\":\"{ex.Message}\"}}"); } finally { semaphore.Release(); }});awaitTask.WhenAll(tasks);sw.Stop();Console.WriteLine($"Pipeline complete: {results.Count} QR codes from {files.Length} files in {sw.Elapsed.TotalSeconds:F1}s");
using IronQr;
using IronQr.Enum;
using IronSoftware.Drawing;
using System;
using System.Collections.Concurrent;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
string[] files = Directory.GetFiles("high-volume/", "*.png");
var results = new ConcurrentBag<(string File, string Value)>();
int maxConcurrency = Environment.ProcessorCount;
using var semaphore = new SemaphoreSlim(maxConcurrency);
var sw = Stopwatch.StartNew();
var tasks = files.Select(async file =>
{
await semaphore.WaitAsync();
try
{
var bmp = AnyBitmap.FromFile(file);
// Auto: runs ML detection plus a basic scan so result.Value is populated
var input = new QrImageInput(bmp, QrScanMode.Auto);
var qrResults = await new QrReader().ReadAsync(input);
foreach (var qr in qrResults)
{
results.Add((Path.GetFileName(file), qr.Value));
}
}
catch (Exception ex)
{
Console.Error.WriteLine($"{{\"file\":\"{Path.GetFileName(file)}\",\"error\":\"{ex.Message}\"}}");
}
finally
{
semaphore.Release();
}
});
await Task.WhenAll(tasks);
sw.Stop();
Console.WriteLine($"Pipeline complete: {results.Count} QR codes from {files.Length} files in {sw.Elapsed.TotalSeconds:F1}s");
ImportsIronQrImportsIronQr.EnumImportsIronSoftware.DrawingImportsSystemImportsSystem.Collections.ConcurrentImportsSystem.DiagnosticsImportsSystem.IOImportsSystem.LinqImportsSystem.ThreadingImportsSystem.Threading.TasksDim files AsString() = Directory.GetFiles("high-volume/", "*.png")Dim results As New ConcurrentBag(Of (FileAsString, ValueAsString))()Dim maxConcurrency AsInteger = Environment.ProcessorCountUsing semaphore As New SemaphoreSlim(maxConcurrency) Dim sw AsStopwatch = Stopwatch.StartNew() Dim tasks = files.Select(Async Function(file)Await semaphore.WaitAsync()Try Dim bmp = AnyBitmap.FromFile(file) ' Auto: runs ML detection plus a basic scan so result.Value is populated Dim input = New QrImageInput(bmp, QrScanMode.Auto) Dim qrResults = Await (New QrReader()).ReadAsync(input) For Each qr In qrResults results.Add((Path.GetFileName(file), qr.Value)) NextCatch ex AsExceptionConsole.Error.WriteLine($"{{""file"":""{Path.GetFileName(file)}"",""error"":""{ex.Message}""}}")Finally semaphore.Release()EndTry End Function)AwaitTask.WhenAll(tasks) sw.Stop()Console.WriteLine($"Pipeline complete: {results.Count} QR codes from {files.Length} files in {sw.Elapsed.TotalSeconds:F1}s")EndUsing
Imports IronQr
Imports IronQr.Enum
Imports IronSoftware.Drawing
Imports System
Imports System.Collections.Concurrent
Imports System.Diagnostics
Imports System.IO
Imports System.Linq
Imports System.Threading
Imports System.Threading.Tasks
Dim files As String() = Directory.GetFiles("high-volume/", "*.png")
Dim results As New ConcurrentBag(Of (File As String, Value As String))()
Dim maxConcurrency As Integer = Environment.ProcessorCount
Using semaphore As New SemaphoreSlim(maxConcurrency)
Dim sw As Stopwatch = Stopwatch.StartNew()
Dim tasks = files.Select(Async Function(file)
Await semaphore.WaitAsync()
Try
Dim bmp = AnyBitmap.FromFile(file)
' Auto: runs ML detection plus a basic scan so result.Value is populated
Dim input = New QrImageInput(bmp, QrScanMode.Auto)
Dim qrResults = Await (New QrReader()).ReadAsync(input)
For Each qr In qrResults
results.Add((Path.GetFileName(file), qr.Value))
Next
Catch ex As Exception
Console.Error.WriteLine($"{{""file"":""{Path.GetFileName(file)}"",""error"":""{ex.Message}""}}")
Finally
semaphore.Release()
End Try
End Function)
Await Task.WhenAll(tasks)
sw.Stop()
Console.WriteLine($"Pipeline complete: {results.Count} QR codes from {files.Length} files in {sw.Elapsed.TotalSeconds:F1}s")
End Using