如何使用 C# 在 BarCode 中使用 Async 和多執行緒

如何在 C# 中使用 IronBarcode 實現非同步和多線程

This article was translated from English: Does it need improvement?
Translated
View the article in English

Async操作和Multithreading操作這兩個術語經常被混淆。 兩種方法都旨在透過優化系統資源利用率和縮短運行時間來提高程式效能和效率。然而,它們在實現方式、機制和預期應用場景方面有所不同。 IronBarcode 兩種方法都支援。 本文探討了它們之間的差異以及如何使用 IronBarcode 來實現它們。

快速入門:非同步和多執行緒條碼讀取範例

使用以下一行範例即可立即開始使用 IronBarcode。 它展示瞭如何輕鬆地將非同步讀取和多線程選項結合起來,以最少的設定並行掃描多個條碼圖像。

Nuget Icon立即開始使用 NuGet 建立 PDF 檔案:

  1. 使用 NuGet 套件管理器安裝 IronBarcode

    PM > Install-Package BarCode

  2. 複製並運行這段程式碼。

    var results = await IronBarCode.BarcodeReader.ReadAsync(imagePaths, new IronBarCode.BarcodeReaderOptions { Multithreaded = true, MaxParallelThreads = 4, ExpectMultipleBarcodes = true });
  3. 部署到您的生產環境進行測試

    立即開始在您的專案中使用 IronBarcode,免費試用!
    arrow pointer


非同步讀取條碼範例

讓我們先來了解什麼是非同步閱讀以及它如何使用戶受益。 非同步讀取允許長時間或阻塞性操作在不阻塞主執行緒執行的情況下進行。 在 C# 中,使用者可以使用asyncawait關鍵字以及支援非同步功能的方法。 這不會創建新線程,而是釋放當前線程。 雖然主執行緒仍然是啟動和管理任務所必需的,但它不需要專門用於單一任務。 當非同步方法需要主執行緒參與時,主執行緒會被調用,這樣在不需要時,主執行緒就可以處理其他任務,例如讀寫檔案或發出網路請求等 I/O 密集型任務。

我們以條碼讀取為例。 在這種情況下,具體步驟如下:

  • 讀取文件
  • 應用閱讀選項 條碼解碼

在"讀取檔案"步驟中,可以釋放主任務。

使用ReadAsyncReadPdfAsync方法分別非同步讀取影像和 PDF 文件中的條碼。

:path=/static-assets/barcode/content-code-examples/how-to/async-multithread-async.cs
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());
}
Imports IronBarCode
Imports System
Imports System.Collections.Generic
Imports System.Threading.Tasks

Private imagePaths As New List(Of String)() From {"image1.png", "image2.png"}

' Barcode reading options
Private options As New BarcodeReaderOptions() With {.ExpectMultipleBarcodes = True}

' Read barcode using Async
Private asyncResult As BarcodeResults = await BarcodeReader.ReadAsync(imagePaths, options)

' Print the results to console
For Each result In asyncResult
	Console.WriteLine(result.ToString())
Next result
$vbLabelText   $csharpLabel

從上面的程式碼片段中,我們已經實例化了一個圖像路徑列表,供 IronBarcode 非同步讀取。 若要讀取映像,可以使用BarcodeReader類別中的ReadAsync方法。 用戶隨後可以指定圖像路徑以及讀取選項。

這種非同步操作方法也可用於讀取 PDF 文件中的條碼,稱為ReadPdfAsync ,它是同一類別的一部分。

多線程讀取條碼範例

與非同步操作不同,多執行緒允許單一進程在多個執行緒中同時執行。 這意味著多線程不是在單一線程中按順序執行進程,而是將任務分配給多個線程,從而實現並發執行。 然而,要讓多執行緒正常運作,機器必須有多個 CPU 核心,因為這些核心用於獨立執行緒。 與非同步操作類似,多執行緒旨在提高應用程式的效能和響應速度。

在 IronBarcode 中,透過設定Multithreaded屬性並指定 BarcodeReaderOptions 中的MaxParallelThreads來啟用多執行緒,從而指定並發執行的最大核心數。 MaxParallelThreads的預設值為 4,可根據可用的 CPU 核心數進行調整。

請注意要尋找可用核心:任務管理器 -> 效能標籤 -> 按一下 CPU。 "核心數"欄位顯示計數。

:path=/static-assets/barcode/content-code-examples/how-to/async-multithread-multithread.cs
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());
}
Imports IronBarCode
Imports System
Imports System.Collections.Generic
Imports System.Threading.Tasks

Private imagePaths As New List(Of String)() From {"test1.jpg", "test2.png"}

' Barcode reading options
Private options As New BarcodeReaderOptions() With {
	.Multithreaded = True,
	.MaxParallelThreads = 4,
	.ExpectMultipleBarcodes = True
}

' Read barcode with multithreaded enabled
Private results As BarcodeResults = BarcodeReader.Read(imagePaths, options)

' Print the results to console
For Each result In results
	Console.WriteLine(result.ToString())
Next result
$vbLabelText   $csharpLabel

效能比較

現在,讓我們讀取下面的兩張圖片,並比較普通操作、非同步操作和多執行緒操作的讀取時間。

範例圖片

圖1
圖2
正常閱讀 非同步讀取 多線程讀取(4 核)
1.75秒 1.67秒 1.17秒

從對比表中可以看出,一旦實現了非同步和多執行緒讀取,效能就會顯著提高。 然而,這兩種操作的目的和方法各不相同。 因此,用戶需要確定哪種方法更適合他們正在建立的應用程式。

最後,可能會出現單一文件上出現多個條碼的情況。 如需了解更多信息,請訪問"讀取多個條碼"指南。

常見問題解答

如何在 C# 中實現異步 BarCode 讀取?

您可以使用 IronBarcode 的 ReadAsyncReadPdfAsync 方法在 C# 中實現異步條碼讀取。這些方法允許在不阻塞主線程的情況下從圖像和 PDF 中讀取條碼。

啟用條碼處理多執行緒的步驟為何?

若要啟用多執行緒處理條碼,請設定 Multithreaded 屬性為 true 並配置 MaxParallelThreads 屬性以有效利用多個 CPU 核心。IronBarcode 支持这些配置。

在 BarCode 讀取中使用異步操作有哪些優點?

條碼讀取中的異步操作允許任務在不阻塞主線程的情況下進行,增強了應用程序的反應能力,特別是在 I/O 綁定操作中。IronBarcode的異步方法通過使用asyncawait關鍵字來實現。

多執行緒如何改善 BarCode 讀取效能?

多執行緒可允許在多個 CPU 核心上同時執行任務,從而加快處理速度,從而提高條碼讀取性能。這對於 CPU 綁定的任務尤其有利。

在多執行緒條碼讀取中使用的預設線程數是多少?

在 IronBarcode 中,多線程條碼讀取所使用的預設線程數為 4,可根據您 CPU 的能力通過 MaxParallelThreads 屬性進行調整。

我在哪裡可以下載 C# 中異步和多執行緒條碼讀取的庫?

您可以從 .NET 套件管理員 NuGet 下載用於 C# 中異步和多執行緒條碼讀取的函式庫,網址為 https://nuget.org/packages/IronPdf/。這個函式庫提供了同步與多執行緒操作的功能。

多執行緒是否可在所有系統上使用於 BarCode 讀取?

多執行緒可在具有多個 CPU 核心的系統上使用,因為這些核心可實現線程並發處理。IronBarcode 的多執行緒功能充分利用了這些系統的優勢。

如何比較正常、異步和多線程條碼讀取的效能?

效能比較顯示,一般讀取速度最慢,同步讀取速度較快,而多執行緒讀取由於可利用多個 CPU 核心,因此速度最快。IronBarcode 提供這些讀取選項以增強效能。

讀取文件中多個 BarCode 的最佳方法是什麼?

IronBarcode 為讀取文件中的多個 BarCode 提供了全面的支援。如需詳細指導,請參考 /csharp/barcode/how-to/read-multiple-barcodes/ 的說明文件。

Hairil Hasyimi Bin Omar
軟體工程師
和所有优秀的工程师一样,Hairil 是个努力学习者。他正在细化自己的 C# 、Python 和 Java 知识,将这些知识应用于 Iron Software 各个团队成员以增加价值。Hairil 自马来西亚 Universiti Teknologi MARA 加入 Iron Software 团队,并以化学与工艺工程学士学位毕业。
準備好開始了嗎?
Nuget 下載 1,979,979 | Version: 2025.11 剛發表