2010-04-12 3 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"); 
    } 

Проверка немного тяжеловесной, распознаватель все равно будет работать, если он будет создан на рабочем потоке в программе, которая также имеет поток пользовательского интерфейса. Хотя этот режим весьма нежелателен, каждый вызов распознавателя будет маршализирован, и любые события, которые вы создадите, должны быть маршалированы клиентом. Я бы предложил аргумент вашему основному конструктору класса, который позволяет клиенту указать, что она действительно делает, чтобы распознаватель работал в потоке.

 Смежные вопросы

  • Нет связанных вопросов^_^