2015-04-26 32 views
1

我試圖使用OCR工具。該工具從PDF獲取文本並將其轉換爲RTF。異常:調用線程必須是STA,因爲很多UI組件都需要這個

然後,我必須把它轉換爲HTML,所以我使用:

outputText = MarkupConverter.RtfToHtmlConverter.ConvertRtfToHtml(
       System.Text.Encoding.Default.GetString(response.fileData)); 

我把一個破發點中的這條線,導致該行後,我得到了一個例外:

調用線程必須是STA,因爲許多UI組件都需要這個。

所以我試圖把<STAThread()>上面的函數:

<STAThread()> 
Public Shared Function GetFileTextByOCRTool(path As String) As String 

但它不工作(我得到同樣的除外)..

不它(<STAThread()>)定義作爲STA的功能?

任何幫助表示讚賞!

回答

2

如果你讀了STAThreadAttribute文檔中,你會看到下面的話:

應用該屬性的入口點方法(在C#和Visual Basic的Main()方法)。它對其他方法沒有影響。要設置在代碼中開始的線程的公寓狀態,請在啓動線程之前使用Thread.SetApartmentStateThread.TrySetApartmentState方法。

所以,你必須使用屬性(否則你的主線程將進入MTA)來標記你應用程序的入口點,或者如果你是從另一個線程調用組件需要調用Thread.SetApartmentState設置線程到STA在線程啓動之前。

請注意,一旦一個線程使用COM互操作並進入一個公寓,線程不可能離開公寓並進入另一個公寓。

如果您正在使用任務或線程池線程,您將無法將公寓狀態設置爲STA。

相關問題