使用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。

我真的想知道解决方案,如果有人有经验的话