2010-04-12 29 views

回答

0

如果以通常的方式創建Winforms應用程序,它將創建自己的消息泵。這就是你應該需要的。

1

您不必創建一個,WinForm應用程序就有一個。

2

SpeechRecognitionEngine是一個公寓線程COM服務器的包裝。是的,對它們的一個硬性要求是至少有一個線程是STA並且產生一個消息循環。由於您正在編寫圖書館,因此無法控制客戶選擇的內容。但是你可以告訴她有一個問題,而不是讓你的語音識別器陷入僵局。此檢查添加到您的類的構造函數:

if (System.Threading.Thread.CurrentThread.GetApartmentState() != 
     System.Threading.ApartmentState.STA) { 
    throw new InvalidOperationException("UI thread required"); 
    } 

的檢查是有點笨拙,如果在一個程序,它也有一個UI線程工作線程創建的識別器仍然可以工作。雖然這種模式是非常不可取的,但每次對識別器的調用都會被封送,並且您生成的任何事件都必須由客戶端封送。我會建議你的主類構造函數的一個參數,它允許客戶端指示她真的確實想讓識別器在一個線程上運行。