2010-04-12 80 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线程工作线程创建的识别器仍然可以工作。虽然这种模式是非常不可取的,但每次对识别器的调用都会被封送,并且您生成的任何事件都必须由客户端封送。我会建议你的主类构造函数的一个参数,它允许客户端指示她真的确实想让识别器在一个线程上运行。