2010-04-12 6 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 스레드가있는 프로그램에서 작업자 스레드에서 생성 된 경우 인식기는 여전히 작동합니다. 이 모드는 매우 바람직하지 않지만 인식기에 대한 모든 호출은 마샬링되고 생성하는 모든 이벤트는 클라이언트에 의해 마샬링되어야합니다. 클라이언트가 그녀가 실제로 을 나타내도록 허용하는 기본 클래스 생성자에 인수를 제안하면은 스레드에서 인식기를 실행해야합니다.

관련 문제