Я пишу плагин (файл dll), и я создаю WinForm в качестве его интерфейса/диалога. Если для этого требуется насос сообщений, как и где его создать?Требуется ли распознавание речи с использованием .NET Framework для подачи сообщений?
ответ
Если вы создаете приложение Winforms обычным способом, он создаст свой собственный насос сообщений. Это все, что вам нужно.
Вам не нужно создавать одно приложение WinForm.
SpeechRecognitionEngine - обертка вокруг COM-сервера с резьбой. Да, жесткое требование для них - это, по крайней мере, один поток, который является STA, и накачивает контур сообщения. Поскольку вы пишете библиотеку, вы не можете контролировать то, что выбирает ваш клиент. Но вы можете сказать ей, что есть проблема, а не просто блокировка вашего распознавателя речи. Добавьте этот чек в свой конструктор класса:
if (System.Threading.Thread.CurrentThread.GetApartmentState() !=
System.Threading.ApartmentState.STA) {
throw new InvalidOperationException("UI thread required");
}
Проверка немного тяжеловесной, распознаватель все равно будет работать, если он будет создан на рабочем потоке в программе, которая также имеет поток пользовательского интерфейса. Хотя этот режим весьма нежелателен, каждый вызов распознавателя будет маршализирован, и любые события, которые вы создадите, должны быть маршалированы клиентом. Я бы предложил аргумент вашему основному конструктору класса, который позволяет клиенту указать, что она действительно делает, чтобы распознаватель работал в потоке.