使用SemanticResultKey时的TargetInvocationException
我想建立我的语法以接受多个数字。 当我重复这个数字就像说’二十一’时,它有一个错误。 所以我不断减少我的代码以找到问题。 我为语法构建器提供了以下代码:
string[] numberString = { "one" }; Choices numberChoices = new Choices(); for (int i = 0; i < numberString.Length; i++) { numberChoices.Add(new SemanticResultValue(numberString[i], numberString[i])); } gb[1].Append(new SemanticResultKey("op1", (GrammarBuilder)numberChoices), 1, 2);
现在,当我发出“one one”时,它仍然给了我这个例外
当我搜索它时,它声明这是我的代码之外的一个例外,我想知道这是Microsoft.Speech dll中的错误还是我遗漏了一些东西
编辑1:
我玩了代码,并将识别为Async,如下所示:
sre.RecognizeAsync(RecognizeMode.Multiple);
代替
sre.Recognize();
现在,当我说’二十一’时,它会得到这个例外:base = {“规则’root中的重复语义键’op1’。”}
我知道问题在于语法,但我确实为’op1’重复了这个问题。 我错过了什么?
我最终使用了被识别的文本来自己解析它
void sre_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
我解析了识别的字符串:
e.Result
代替
recoResult.Semantics["op1"].Value.ToString())
因为.Semantics对象抛出上面提到的exception。
我真的想知道解决方案,如果有人有经验的话