如何在C#中使用非同步與多執行緒 | IronOCR

C# 非同步與多執行緒支援搭配 IronOCR

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. 使用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 中使用非同步支援?

非同步程式設計透過允許開發者執行 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 應用程式中與現代異步/等待模式整合時
: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 處理複雜性
  • 現代模式:充分支援 .NET 的 Tesseract 5中的異步/等待模式
  • 易於整合:與現有 .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或手動配置即可進行多執行緒。該程式庫將平行處理直接整合到OCR工作流程中,自動管理多核心的執行緒以獲得最佳效能。

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

IronOCR中的OcrReadTask物件讓您能夠在處理文件時利用非同步並發。它允許您同時非同步地管理OCR操作,而程式庫會處理其底層的多執行緒複雜性。

IronOCR是否完全支援.NET 10?

.NET 10 受到IronOCR通過其最新版本2025.12的支援。您可以使用NuGet(Install-Package IronOcr)安裝程式庫,在.NET 10下運行包括ReadAsync()在內的非同步方法,無需做特殊配置。

使用IronOCR進行文件管理的好處是什麼?

使用IronOCR進行文件管理通過將掃描的文件轉換為可搜索和可編輯的文字來簡化工作流程,減少手動資料輸入的需求並提高文件的可存取性。

IronOCR如何提高資料精確性?

IronOCR通過其先進的識別算法和影像校正功能提高資料精確性,確保文字提取過程既可靠又精確。

IronOCR有免費試用版嗎?

有的,Iron Software提供IronOCR的免費試用版,允許使用者在做出購買決定前測試其功能和能力。

Chipego
軟體工程師
Chipego擅於傾聽,幫助他理解客戶問題,並提供明智的解決方案。他在2023年加入Iron Software團隊,之前學習了資訊技術學士學位。Chipego專注於IronPDF和IronOCR這兩種產品,但他的產品知識每天都在增長,因為他找到支援客戶的新方法。他喜歡Iron Software的合作生活,公司內的團隊成員帶來他們的多樣化經驗,貢獻出有效且創新的解決方案。當Chipego不在辦公桌前時,他常常在讀好書或踢足球。
準備開始了嗎?
Nuget 下載 6,136,090 | 版本: 2026.7 剛剛發布
Still Scrolling Icon

還在滾動?

想要快速證明? PM > Install-Package IronOcr
執行範例 觀看您的圖像轉變為可搜尋文字。