При возврате основного метода, приложение закрывается, да. В этом случае все background -threads прерваны. То, что остается, - это темы переднего плана. Они поддерживают этот процесс. Это то, что делает Message Loop.
Итак, у вас должен быть какой-то цикл в потоке переднего плана (либо в основном методе, либо в любом новом созданном потоке с параметром IsBackground
- false).
Это может выглядеть следующим образом:
SpeechRecognitionEngine _recognizer = new SpeechRecognitionEngine();
while (_recognizer.IsActive) // or something similar
{
Thread.Sleep(100);
}
Это справедливо не красота, поскольку она тратит ресурсы и делает использование Thread.Sleep
. Когда SpeechRecognitionEngine
имеет событие, когда он любит бросить курить, вы могли бы иметь что-то вроде:
ManualResetEvent reset = new ManualResetEvent(false);
SpeechRecognitionEngine _recognizer = new SpeechRecognitionEngine();
_recognizer.Quitting += new EventHandler((sender, args) =>
{
reset.Set();
});
reset.WaitOne();
ManualResetEvent
позволяет ждать Quitting
-Event. После того, как был вызван Set
, возвращается WaitOne
и ваше приложение/процесс завершается.
Что "думает" ты с '' _recognizer''? Пожалуйста, покажите нам полный код –
Я реализую грамматику, а затем отправляю действие на распознанные слова.Это может быть запуск приложения или ответ с текстом на речь. –
Код не помогает в этом вопросе. –