【问题标题】:TargetInvocationException when using SemanticResultKey使用 SemanticResultKey 时出现 TargetInvocationException
【发布时间】:2015-05-29 13:46:51
【问题描述】:

我想构建我的语法来接受多个数字。当我像说“二十一”这样重复数字时,它有一个错误。所以我一直在减少我的代码以找到问题。我为语法生成器找到了以下代码:

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:

我玩弄了代码,并将识别设为异步如下:

sre.RecognizeAsync(RecognizeMode.Multiple);

而不是

sre.Recognize();

现在,例如,当我说“二十一”时,它会出现以下异常: base = {"规则'root'中的重复语义键'op1'。"}

我知道问题出在语法上,但我确实为“op1”重复了它。我错过了什么??

【问题讨论】:

  • 查看 TargetInvocationException 的内部异常。这通常会告诉你另一边出了什么问题。
  • 我不能这样做,因为源代码被锁定.. 它的 Microsoft.Speech dll
  • 我的意思是Exception类有一个叫做InnerExeception的属性。当抛出 TargetInvocationException 时,另一端发生的异常通常会包含在该属性中。因此,如果您在代码中捕获 TargetInvocationException 并在此处设置断点,您应该可以了解 Microsoft.Speech 中出了什么问题。
  • 是的,我知道,但是在这个异常中,它会打开另一个页面,其中提到它无法访问,并且没有内部异常可以单击它并查看异常。
  • 它甚至不会在尝试和捕获中被捕获

标签: c# .net speech-recognition speech-to-text


【解决方案1】:

最后我使用识别的文本自己解析它 在

void sre_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)

我解析了识别出的字符串:

e.Result

代替

recoResult.Semantics["op1"].Value.ToString())

因为 .Semantics 对象会引发上述异常。

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

【讨论】:

  • 你在使用替代品吗?因为我在使用语义构造时遇到了同样的错误,并且我尝试遍历替代项。在构建替代项时,它似乎是由异常引起的,它试图添加字典中已经存在的语义结果键......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-23
  • 1970-01-01
  • 1970-01-01
  • 2021-07-27
  • 2014-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多