如何在 C# 中使用 Async 與多執行緒 | IronOCR

IronOCR 對 C# Async 與多執行緒的支援

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

IronOCR 會自動處理所有 CPU 核心間的多執行緒運作,並提供如 ReadAsync() 之類的非同步方法,讓您在不阻塞主執行緒的情況下執行 OCR,確保在處理大型文件時應用程式仍能保持流暢響應。

簡介

要高效處理大量文字資料,OCR 操作必須兼具準確性與速度。 本文探討 IronOCR 與 Tesseract 中的非同步支援與多執行緒功能。 非同步程式設計可實現非阻塞式 OCR 執行,確保應用程式在執行文字辨識任務時仍能保持響應性。 多執行緒技術透過並行處理,能顯著提升 OCR 效能。 這些技術有助於開發人員提升 OCR 驅動型應用程式的效率與反應速度。

快速入門:使用 ReadAsync 輕鬆實現非同步 OCR using IronTesseractReadAsync 方法執行 OCR,同時不阻塞主執行緒。 這能快速為您的應用程式增添響應式、非阻塞的 OCR 功能。 它在處理 PDF 文件或同時處理多個圖像檔案時表現尤為出色。

  1. using NuGet 套件管理員安裝 https://www.nuget.org/packages/IronOcr

    PM > Install-Package IronOcr
  2. 請複製並執行此程式碼片段。

    var result = await new IronOcr.IronTesseract().ReadAsync("image.png");
  3. 部署至您的生產環境進行測試

    立即透過免費試用,在您的專案中開始使用 IronOCR

    arrow pointer

IronOCR 中的多執行緒機制如何運作?

IronOCR 透過無縫的多執行緒處理,提升影像處理與 OCR 讀取效率,開發人員無需使用專用的 API。 IronTesseract 會自動調用多核心上的所有可用執行緒,藉此優化系統資源以加速 OCR 執行。 此內建的多執行緒功能透過將並行處理直接整合至 OCR 工作流程中,不僅簡化了開發流程,更顯著提升了效能。

該函式庫的多執行緒 Tesseract 實作具備以下關鍵優勢:

  • 自動 CPU 核心利用率:IronOCR 會自動偵測並使用所有可用核心,無需手動設定
  • 執行緒安全操作:所有 OCR 操作預設皆設計為執行緒安全
  • 最佳化的資源管理:記憶體與處理資源會在各執行緒間進行高效分配
  • 可擴展的效能:處理時間會隨著可用核心數量的增加而成比例地減少

以下是 C# 中的多執行緒讀取範例:

:path=/static-assets/ocr/content-code-examples/how-to/async-simple-multithreading.cs
using IronOcr;
using System;

var ocr = new IronTesseract();

using (var input = new OcrPdfInput(@"example.pdf"))
{
    var result = ocr.Read(input);
    Console.WriteLine(result.Text);
};
Imports IronOcr
Imports System

Private ocr = New IronTesseract()

Using input = New OcrPdfInput("example.pdf")
	Dim result = ocr.Read(input)
	Console.WriteLine(result.Text)
End Using
$vbLabelText   $csharpLabel

針對需要快速 OCR 配置的高階情境,開發人員可微調多執行緒行為,以符合特定的效能需求,同時維持準確性。

如何在 IronOCR 中使用 Async Support?

非同步程式設計透過讓開發人員在不阻塞主執行緒的情況下執行 OCR 任務,從而優化 OCR 效能。 這能確保應用程式在處理大型文件或圖像進行文字辨識時,仍能保持響應速度。 非同步支援功能使系統能在 OCR 操作於背景執行時,同時處理其他任務。 此功能對於在使用者介面中實作 OCR 進度追蹤至關重要。

本節介紹 IronOCR 中對非同步支援的整合,並展示各種使 OCR 服務成為非阻塞式的方法。 IronOCR 的非同步功能,能確保在執行 OCR 操作時需要即時回應的桌面應用程式,以及處理多個並行 OCR 請求的網路服務,皆能獲得最佳效能。

何時該使用 OcrReadTask 物件?

OcrReadTask 物件可透過 IronOCR 增強 OCR 流程的控制力與靈活性。 這些物件封裝了 OCR 操作,可有效管理文字辨識任務。 本節將示範如何在 IronOCR 工作流程中使用 OcrReadTask 物件,並說明它們如何啟動及優化 OCR 任務。 OcrReadTask 物件有助於在協調複雜的文件處理或微調應用程式反應速度時,充分發揮 IronOCR 的功能。

OcrReadTask 物件在以下情況下效果最佳:

  • 您需要對任務執行進行細緻的控制
  • 為可取消的操作實作中止標記功能
  • 管理多個具有不同優先級的並行 OCR 操作
  • 與自訂任務排程器或工作流程引擎整合
:path=/static-assets/ocr/content-code-examples/how-to/async-ocrtask.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();

OcrPdfInput largePdf = new OcrPdfInput("chapter1.pdf");

Func<OcrResult> reader = () =>
{
    return ocr.Read(largePdf);
};

OcrReadTask readTask = new OcrReadTask(reader.Invoke);
// Start the OCR task asynchronously
readTask.Start();

// Continue with other tasks while OCR is in progress
DoOtherTasks();

// Wait for the OCR task to complete and retrieve the result
OcrResult result = await Task.Run(() => readTask.Result);

Console.Write($"##### OCR RESULTS ###### \n {result.Text}");

largePdf.Dispose();
readTask.Dispose();

static void DoOtherTasks()
{
    // Simulate other tasks being performed while OCR is in progress
    Console.WriteLine("Performing other tasks...");
    Thread.Sleep(2000); // Simulating work for 2000 milliseconds
}
Imports Microsoft.VisualBasic
Imports IronOcr

Private ocr As New IronTesseract()

Private largePdf As New OcrPdfInput("chapter1.pdf")

Private reader As Func(Of OcrResult) = Function()
	Return ocr.Read(largePdf)
End Function

Private readTask As New OcrReadTask(AddressOf reader.Invoke)
' Start the OCR task asynchronously
readTask.Start()

' Continue with other tasks while OCR is in progress
DoOtherTasks()

' Wait for the OCR task to complete and retrieve the result
Dim result As OcrResult = Await Task.Run(Function() readTask.Result)

Console.Write($"##### OCR RESULTS ###### " & vbLf & " {result.Text}")

largePdf.Dispose()
readTask.Dispose()

'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'static void DoOtherTasks()
'{
'	' Simulate other tasks being performed while OCR is in progress
'	Console.WriteLine("Performing other tasks...");
'	Thread.Sleep(2000); ' Simulating work for 2000 milliseconds
'}
$vbLabelText   $csharpLabel

如何使用 ReadAsync 方法?

ReadAsync() 提供了一種直接機制,可異步啟動 OCR 操作。 無需複雜的執行緒或任務管理,開發人員即可將非同步 OCR 整合至其應用程式中。 此方法可防止主執行緒在執行 OCR 任務時阻塞,確保應用程式保持回應能力。

ReadAsync 方法適用於:

  • 需要維持使用者介面反應速度的桌面應用程式
  • 能處理多個同時 OCR 請求的網路應用程式
  • 需要追蹤進度的批次處理情境
  • 與 .NET 應用程式中的現代 async/await 模式整合
:path=/static-assets/ocr/content-code-examples/how-to/async-read-async.cs
using IronOcr;
using System;
using System.Threading.Tasks;

IronTesseract ocr = new IronTesseract();

using (OcrPdfInput largePdf = new OcrPdfInput("PDFs/example.pdf"))
{
    var result = await ocr.ReadAsync(largePdf);
    DoOtherTasks();
    Console.Write($"##### OCR RESULTS ###### " +
                $"\n {result.Text}");
}

static void DoOtherTasks()
{
    // Simulate other tasks being performed while OCR is in progress
    Console.WriteLine("Performing other tasks...");
    System.Threading.Thread.Sleep(2000); // Simulating work for 2000 milliseconds
}
Imports Microsoft.VisualBasic
Imports IronOcr
Imports System
Imports System.Threading.Tasks

Private ocr As New IronTesseract()

Using largePdf As New OcrPdfInput("PDFs/example.pdf")
	Dim result = Await ocr.ReadAsync(largePdf)
	DoOtherTasks()
	Console.Write($"##### OCR RESULTS ###### " & $vbLf & " {result.Text}")
End Using

'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'static void DoOtherTasks()
'{
'	' Simulate other tasks being performed while OCR is in progress
'	Console.WriteLine("Performing other tasks...");
'	System.Threading.Thread.Sleep(2000); ' Simulating work for 2000 milliseconds
'}
$vbLabelText   $csharpLabel

為何應在 IronOCR 中使用非同步與多執行緒?

IronOCR 結合非同步支援與多執行緒功能,為現代應用程式開發帶來諸多優勢:

效能優勢:

  • 提升處理效能:可同時處理多份文件,且不造成阻塞
  • 更佳的資源利用率:最大化所有可用核心的 CPU 使用率
  • 降低延遲:無需等待前一操作完成,即可立即開始處理
  • 可擴展架構:無需變更架構即可處理日益增加的工作負載

開發優勢:

  • 簡化程式碼:無需手動管理執行緒 — IronOCR 會處理這些複雜的細節
  • 現代模式Tesseract 5 for .NET 全面支援 async/await 模式
  • 輕鬆整合:可與現有的 .NET 非同步基礎架構無縫協作
  • 可維護的解決方案:遵循 .NET 最佳實務的清晰、易讀程式碼

IronOCR 中的多執行緒功能可顯著優化 OCR 任務。 內建的多執行緒功能,結合 ReadAsync() 等方法,可簡化大量文字資料的處理流程。 此組合確保應用程式保持響應迅速且高效,使 IronOCR 成為具備精簡文字辨識功能、用於開發高效能軟體的有效工具。 若要開始使用完整的功能集,請參閱我們的 NuGet 套件安裝指南

常見問題

如何在 C# 中以非阻塞方式執行 OCR,同時不阻塞主執行緒?

IronOCR 提供 ReadAsync 方法,可實現非阻塞式的 OCR 執行。您只需使用 `var result = await new IronOcr.IronTesseract().ReadAsync("image.png");` 即可異步執行 OCR,在處理文件時仍能保持應用程式的響應性。

OCR 會自動使用多個 CPU 核心以提升效能嗎?

是的,IronOCR 透過內建的多執行緒功能,會自動調用所有可用的 CPU 核心。IronTesseract 的實作能在無需手動設定的情況下,自動偵測並利用所有核心,從而提供最佳化的資源管理與可擴展的效能。

在 OCR 處理中,多執行緒的主要優勢為何?

IronOCR 的多執行緒實作具備自動 CPU 核心利用率、預設的執行緒安全操作、針對記憶體與處理的優化資源管理,以及可擴展的效能——處理時間會隨可用核心數的增加而成比例減少。

我能否使用非同步 OCR 同時處理多個 PDF 文件?

是的,IronOCR 的 ReadAsync 方法在處理 PDF 文件或同時處理多個圖像檔案時表現尤為出色,讓您能夠並行處理多個文件,同時不會阻塞您的應用程式。

我需要撰寫特殊程式碼才能啟用 OCR 的多執行緒功能嗎?

不,IronOCR 無需專用的 API 或手動設定即可支援多執行緒。IronOCR程式庫將並行處理無縫整合至 OCR 工作流程中,並自動管理跨多核心的執行緒,以實現最佳效能。

什麼是 OcrReadTask 物件?它如何協助進行非同步處理?

IronOCR 中的 OcrReadTask 物件讓您在處理文件時能善用非同步並行處理。它讓您能夠以非同步方式管理 OCR 操作,同時由 IronOCR 程式庫處理底層的多執行緒複雜性。

IronOCR 是否完全相容於 .NET 10?

IronOCR 透過其最新版本 2025.12 支援 .NET 10。您可以使用 NuGet(Install-Package IronOcr)安裝此函式庫,並在 ReadAsync() 等非同步方法,無需進行特殊設定。

使用 IronOCR 進行文件管理有哪些好處?

使用 IronOCR 進行文件管理,可將掃描文件轉換為可搜尋且可編輯的文字,從而簡化工作流程,減少人工資料輸入的需求,並提升文件的可存取性。

IronOCR 如何提升資料準確性?

IronOCR 透過其先進的辨識演算法與影像校正功能來提升資料準確性,確保文字擷取過程既可靠又精確。

IronOCR 是否有提供免費試用版?

是的,Iron Software 提供 IronOCR 的免費試用版,讓使用者能在決定購買前測試其功能與效能。

Chipego
軟體工程師
Chipego 具備天生的傾聽能力,這有助於他理解客戶的問題,並提供明智的解決方案。他在取得資訊科技理學士學位後,於 2023 年加入 Iron Software 團隊。 IronPDF 和 IronOCR 是 Chipego 目前專注的兩款產品,但他對所有產品的了解正與日俱增,因為他不斷探索支援客戶的新方法。他十分欣賞 Iron Software 充滿協作精神的職場氛圍,來自公司各部門的團隊成員皆能運用各自豐富的經驗,共同打造高效且創新的解決方案。當 Chipego 離開辦公桌時,常能看到他沉浸於一本好書,或是享受踢足球的樂趣。
準備開始了嗎?
Nuget 下載 5,896,332 | 版本: 2026.5 just released
Still Scrolling Icon

還在往下捲動嗎?

想要快速確認成果嗎? PM > Install-Package IronOcr
執行範例 觀看您的圖片轉為可搜尋文字。