例外:由于对象的当前状态,操作无效。在UWP App中的语音识别器对象

时间:2016-07-20 05:43:38

标签: windows-10 uwp

我一直在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()。这有什么不对?

1 个答案:

答案 0 :(得分:1)

虽然您尝试调用StartAsync方法时遇到此异常,但问题可能不在此处。正如您所见,在官方示例中,它也使用此代码并且运行良好。

由于我没有代码的其他部分,很难说是什么导致了这个异常。我建议您按照Continuous dictation中的步骤操作,并参考Speech recognition and synthesis sample来实现您自己的步骤。

这里的一些要点是:

  
      
  • 如果您在连续识别事件处理程序中更新应用程序的UI,请获取UI线程的调度程序。
  •   
  • 初始化语音识别器。
  •   
  • 编译内置的听写语法。 注意语音识别需要至少一个约束来定义可识别的词汇表。如果未指定约束,则使用预定义的听写语法。见Speech recognition
  •   
  • 为识别事件设置事件侦听器。
  •   

导致问题的一个可能原因是缺少初始化中的编译约束。我们需要在开始发言之前致电SpeechRecognizer.CompileConstraintsAsync method

参考文件:

  必须始终在RecognizeAsyncRecognizeWithUIAsync之前调用

CompileConstraintsAsync ,即使Constraints属性中未指定约束也是如此。

如果我们在初始化时错过了await speechRecognizer.CompileConstraintsAsync();,那么在启动识别会话时我们会遇到Operation is not valid due to the current state of the object.异常。