【发布时间】:2015-04-02 14:38:33
【问题描述】:
使用 MSDN 的 SAPI,如何取消同步语音识别操作,或者至少立即停止?
将输入设置为 null 会返回一个错误,指出在识别器正在识别时我不能这样做,并且不能选择使用异步识别。
下面是一个例子
class MainClass {
static void Main( ) {
SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine();
recognizer.LoadGrammar(new DictationGrammar() );
recognizer.SetInputToDefaultAudioDevice();
recognizer.Recognize();
}
void MethodCalledFromOtherThread() {
//Since SpeechRecognitionEngine.Recognize() stops the current thread,
//this method is called from a different thread.
//I NEED the current thread to stop.
//Here I want to Cancel recognizer.Recognize
}
}
【问题讨论】:
-
您可能能够获取原始线程并在其上抛出异常,但this question 说明了您不应该这样做的原因。你能解释一下为什么异步选项对你不起作用,因为它有一个特定的取消方法吗?
-
@JamesThorpe 我的应用程序的工作方式和设置方式,异步操作在性能方面的成本很高
-
从本质上讲,您无法取消同步呼叫。有没有可以使用的函数的 Beginxxx、Endxxx 版本?
-
@John Taylor “函数”是什么意思
-
当您可以使用RecognizeAsync() 时,使用Recognize() 毫无意义。使用 RecognizeAsyncCancel() 可以轻松取消。
标签: c# speech-recognition sapi