我一直在ContinuousRecognitionSession.StartAsync方法上获得此异常:"由于对象的当前状态,操作无效。"即使SpeechRecognizer对象在" Idle"州。以下是代码段
if (SpeechRecognizer.State == SpeechRecognizerState.Idle)
{
await SpeechRecognizer.ContinuousRecognitionSession.StartAsync();
}
这里https://msdn.microsoft.com/en-us/windows/uwp/input-and-devices/enable-continuous-dictation提到语音识别器必须处于"空闲" state以调用StartAsync()。这有什么不对?
答案 0 :(得分:1)
虽然您尝试调用StartAsync
方法时遇到此异常,但问题可能不在此处。正如您所见,在官方示例中,它也使用此代码并且运行良好。
由于我没有代码的其他部分,很难说是什么导致了这个异常。我建议您按照Continuous dictation中的步骤操作,并参考Speech recognition and synthesis sample来实现您自己的步骤。
这里的一些要点是:
- 如果您在连续识别事件处理程序中更新应用程序的UI,请获取UI线程的调度程序。
- 初始化语音识别器。
- 编译内置的听写语法。 注意语音识别需要至少一个约束来定义可识别的词汇表。如果未指定约束,则使用预定义的听写语法。见Speech recognition。
- 为识别事件设置事件侦听器。
导致问题的一个可能原因是缺少初始化中的编译约束。我们需要在开始发言之前致电SpeechRecognizer.CompileConstraintsAsync method。
参考文件:
必须始终在RecognizeAsync或RecognizeWithUIAsync之前调用CompileConstraintsAsync ,即使Constraints属性中未指定约束也是如此。
如果我们在初始化时错过了await speechRecognizer.CompileConstraintsAsync();
,那么在启动识别会话时我们会遇到Operation is not valid due to the current state of the object.
异常。