IRONSOFTWAREHOME

如何使用 IronBarcode 在 C# 中使用异步和多线程

Hairil Hasyimi Bin Omar
Hairil Hasyimi Bin Omar
Updated: 2026年6月3日

IronBarcode 中的异步和多线程以不同方式优化条码读取性能--异步可防止在 I/O 操作期间阻塞主线程,而多线程可跨 CPU 内核同时处理多个条码。

开发人员经常混淆Multithreading操作。 这两种方法都能通过优化系统资源利用率和缩短运行时间来提高程序性能和效率。不过,它们在方法、机制和用例上有所不同。 IronBarcode支持这两种方法。 本文将探讨它们的区别以及使用 IronBarcode 的实现方式。

快速入门:异步和多线程条码读取示例

使用这个单行示例即可立即开始使用IronBarcode。 它展示了如何轻松结合异步读取和多线程选项,以最少的设置平行扫描多个条码图像。

  1. 1Install IronBarcode with NuGet Package Manager

    PM > Install-Package BarCode

  2. 2复制并运行这段代码。

    var results = await IronBarCode.BarcodeReader.ReadAsync(imagePaths, new IronBarCode.BarcodeReaderOptions { Multithreaded = true, MaxParallelThreads = 4, ExpectMultipleBarcodes = true });
    C#
  3. 3部署到您的生产环境中进行测试

    通过免费试用立即在您的项目中开始使用IronBarcode
    arrow pointer

如何使用 IronBarcode 异步读取条码?

异步读取使长期或阻塞操作能够进行而不会阻塞主线程的执行。 在C#中,使用await关键字支持异步功能的方法。 这种方法不会创建额外的线程,而是释放当前线程。 虽然主线程会启动和管理任务,但它不会只专注于一项任务。 当异步方法需要主线程参与时,主线程会返回,从而在不需要时将其释放出来处理其他任务--这对于读/写文件或进行网络请求等 I/O 绑定任务尤其有用。

以条形码阅读为例。 该过程包括:

  • 读取文件
  • 应用读取选项
  • 解码条码

在文件阅读过程中,可以放开主要任务。 正如我们的阅读 BarCode 教程所展示的那样,这对使用多个图像文件或大型 PDF 文件的场景大有裨益。

使用ReadPdfAsync方法分别异步读取图像和PDF文档的条形码。 在实施异步操作之前,请确保您已经通过 NuGet 在您的项目中安装了 IronBarcode。

using IronBarCode;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

List<string> imagePaths = new List<string>() { "image1.png", "image2.png" };

// Barcode reading options
BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    ExpectMultipleBarcodes = true
};

// Read barcode using Async
BarcodeResults asyncResult = await BarcodeReader.ReadAsync(imagePaths, options);

// Print the results to console
foreach (var result in asyncResult)
{
    Console.WriteLine(result.ToString());
}

以上代码片段实例化了一个List的图像路径,由IronBarcode异步读取。 要读取图像,请使用BarcodeReader类。 指定imagePaths和阅读选项。 有关高级配置选项,请参阅我们的条码阅读器设置指南。

该异步操作方法也适用于通过同一类中的ReadPdfAsync读取PDF文档中的条形码。 有关具体的 PDF 阅读配置,请参阅我们的 PDF 条码阅读器设置指南

Multithreaded
MaxParallelThreads

什么情况下应使用异步阅读而不是常规方法?

异步阅读在以下几种情况下表现出色:

1.GUI 应用程序:需要用户界面响应能力的 Windows 窗体或 WPF 应用程序。 Async 可防止在扫描 BarCode 时界面冻结。

2.网络应用:在不阻塞线程的情况下处理多个并发请求的 ASP.NET 应用程序,尤其是在处理上传的条形码图像时。

3.批处理:顺序读取多个条形码图像或 PDF,允许在 I/O 操作期间执行其他任务。

4.网络操作:从远程源或 URL 读取条形码,如我们的 异步从 URL 读取条形码示例所示。

为什么异步阅读可以提高应用程序的响应速度?

异步读取可在 I/O 绑定操作期间释放主线程,从而提高响应速度。 当 IronBarcode 从磁盘读取图像文件或处理 PDF 时,线程不会空闲等待。 在翻译过程中,译员不能只处理用户输入或处理请求等其他任务。 这一点在涉及以下内容时尤为明显

  • 需要大量加载时间的大型图像文件
  • 多页包含 BarCode 的 PDF 文件
  • 基于网络的图像源
  • 需要在检测条形码前使用 图像校正过滤器的场景

使用异步条码读取时有哪些常见误区?

在实施异步条形码读取时,请注意这些常见问题:

  1. 死锁:避免在UI上下文中对异步方法使用Wait()。 在调用链中始终使用await

2.异常处理:将异步调用包在 try-catch 块中,因为异步方法中的异常可能无法按预期传播。

  1. 上下文切换:当不需要返回到原来的同步上下文时,考虑使用ConfigureAwait(false)

4.性能误解:异步不会加速单个操作; 它提高了应用程序的响应速度。 为提高多图像的速度,请考虑使用多线程。

有关异步相关问题的故障排除,请查阅我们的条形码识别故障排除指南

如何启用多线程条码读取?

与异步操作不同,多线程是通过多个线程同时执行一个进程。 多线程不是在单线程中顺序执行,而是将任务分配给多个线程并发执行。 多线程需要多个 CPU 内核,因为这些内核可以独立执行线程。 与异步操作一样,多线程可提高应用程序的性能和响应速度。

在IronBarcode中,通过设置MaxParallelThreads指定并发执行的最大核心数来启用多线程。 默认MaxParallelThreads值为4,可根据可用CPU核心数调整。 有关最佳性能配置,请参阅我们的阅读速度选项指南

请注意: 要查找可用核心:任务管理器 -> 性能选项卡 -> 点击 CPU。 ### 性能比较
using IronBarCode;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

List<string> imagePaths = new List<string>(){"test1.jpg", "test2.png"};

// Barcode reading options
BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    Multithreaded = true,
    MaxParallelThreads = 4,
    ExpectMultipleBarcodes = true
};

// Read barcode with multithreaded enabled
BarcodeResults results = BarcodeReader.Read(imagePaths, options);

// Print the results to console
foreach (var result in results)
{
    Console.WriteLine(result.ToString());
}

我可以期待多少性能改进?

让我们读取两幅示例图像,并比较正常、异步和多线程操作的读取时间。

示例图像

UPC-A 条形码示例,显示数字 0 123456 789012,用于多线程条形码读取演示
用于多线程条码读取演示的 UPC-A 条码样本,显示编号 771234567003
正常阅读异步读取多线程读取(4 核)
1.75秒1.67秒1.17秒

比较结果表明,异步和多线程阅读的性能大幅提高。 与正常阅读相比,多线程可提高约 33%,而异步可提高约 5%。 然而,这些操作的目的和方法各不相同。 选择最适合您的应用要求的方法。

性能改进根据以下因素而有所不同:

  • 处理的图片数量
  • 图像复杂度和 BarCode 质量
  • 可用的 CPU 内核
  • 其他系统资源

对于单个文档上有多个条形码的情况,请访问阅读多个条形码指南。

何时应选择多线程而非同步操作?

选择多线程时:

  1. CPU-Bound Operations:处理涉及复杂图像滤镜或高分辨率图像的重计算
  2. 批处理:需要同时处理多个独立的图像
  3. 多核心系统:部署环境上有多个CPU核心可用
  4. 性能至关重要:原始处理速度比资源效率更加重要

在以下情况下选择异步操作

  1. I/O-Bound Operations:大部分时间涉及读取文件或等待网络响应
  2. UI应用:维护响应的用户界面至关重要
  3. 资源有限:在CPU核心有限的系统上运行 4.网络应用:高效处理多个并发请求

如何确定最佳 MaxParallelThreads 值?

最佳MaxParallelThreads值取决于多个因素:

  1. 可用CPU核心:以Environment.ProcessorCount为基准
  2. 工作负载类型:对纯条形码阅读,使用可用核心的75%
  3. 系统资源:为操作系统和其他进程留有缓冲
  4. 测试结果:根据您的具体工作负载进行基准测试

以下是寻找最佳值的实用方法:

int optimalThreads = Math.Max(1, Environment.ProcessorCount - 1);

对于生产环境,应监控性能并根据实际使用模式进行调整。 考虑为需要最高性能的企业部署实施 许可证密钥配置

有关完整的 API 功能,请查阅 IronBarcode API Reference

常见问题解答

读取 BarCode 时,异步和多线程有什么区别?

using IronBarcode,异步操作可防止在文件读取等 I/O 任务期间阻塞主线程,而多线程则可跨 CPU 内核同时处理多个条形码。async使用async/await关键字在长时间操作时释放主线程,而多线程则创建多个线程并行处理条形码。

如何在 C# 中实现异步 BarCode 读取?

IronBarcode 为异步条码读取提供 ReadAsync() 和 ReadPdfAsync() 方法。只需在 C# 中使用这些带有 async/await 关键字的方法,即可在不阻塞主线程的情况下从图像和 PDF 中读取条形码。这在处理多个图像文件或大型 PDF 文档时尤其有用。

如何启用多线程处理 BarCode?

要在 IronBarcode 中启用多线程,请在 BarcodeReaderOptions 中将 Multithreaded 属性设置为 "true"。您还可以使用 MaxParallelThreads 属性来控制并行线程的数量,从而根据您的系统能力来优化性能。

我能否将异步和多线程结合起来以获得最佳性能?

是的,IronBarcode 允许您将这两种方法结合起来。通过设置 Multithreaded = true 并在 BarcodeReaderOptions 中配置 MaxParallelThreads,您可以在启用多线程的情况下使用 ReadAsync()。这种组合可提供非阻塞 I/O 操作和跨多个 CPU 内核的并行处理。

何时应在条码读取中使用异步与多线程?

在处理 I/O 绑定任务(如读取大文件或进行网络请求)时,请在 IronBarcode 中使用异步操作,因为它可以防止 UI 冻结。当您需要同时处理多个条码,并且有可用的 CPU 资源时,请使用多线程操作。为获得最佳效果,在处理多个大型条码图像或 PDF 时,可将两种方法结合使用。

What factors affect the optimal 'MaxParallelThreads' setting in IronBarcode?

The optimal 'MaxParallelThreads' value is influenced by available CPU cores, workload type, overall system resources, and testing results. A practical starting point is to use one less than the total available CPU cores.

How does IronBarcode's async functionality improve application responsiveness?

Async functionality in IronBarcode increases application responsiveness by freeing the main thread during long I/O-bound barcode reading tasks, allowing the application to handle other processes concurrently, such as user interface updates.

What are the advantages of using multithreading in barcode reading?

Multithreading allows simultaneous processing of multiple images, which enhances performance in CPU-bound operations such as processing complex image filters or high-resolution images. This is beneficial in environments with multiple CPU cores.

How can I implement license key configuration for optimal performance in IronBarcode?

For enterprise deployments requiring maximum performance, consider implementing license key configuration. This can be done by following IronBarcode's documentation on license key settings to fully unlock features and optimize resource utilization.

What are the key differences between async and multithreading in IronBarcode?

Async in IronBarcode prevents blocking the main thread during I/O operations, ideal for file and network tasks, whereas multithreading divides tasks among threads for concurrent execution across CPU cores, improving performance in CPU-bound operations.

准备开始了吗?

Nuget Downloads 2,422,100版本:2026.9刚刚发布

免费获取

30天试用密钥 即刻获取。

bullet_checked无需信用卡或创建账户
bullet_test在生产环境中测试
且无水印
bullet_calendar30天完全
功能性产品
bullet_support试用期间提供
24/5技术支持
立即获取您的免费30 天试用密钥
无需信用卡或创建账户
C# 用于 PDF 的 NuGet 库
通过 NuGet 安装

版本: 2026.9

PM > Install-Package BarCode
nuget.org/packages/BarCode/
  1. 在解决方案资源管理器中,右键点击引用,管理 NuGet 包
  2. 选择浏览并搜索 "IronBarcode"
  3. 选择包并安装
C# PDF DLL
下载 DLL

版本: 2026.9

  1. 下载并将 IronBarCode 解压到解决方案目录中的 ~/Libs 等位置
  2. 在 Visual Studio 解决方案资源管理器中,右键单击引用。选择浏览,"IronBarcode.dll"

许可 $999

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
预约您的免费现场演示
Booking Badge

深受全球数百万工程师信赖

Iron Software 的客户徽标
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户