2015-05-29 27 views
8

我想構建我的語法來接受多個數字。當我重複數字時,比如說'二十一',就有一個錯誤。所以我一直在減少我的代碼以找到問題。我伸手語法生成器下面的一段代碼:使用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); 

現在,當我讀「一一」它仍然給了我這個異常

enter image description here

,當我用Google搜索它,它指出,這是我的代碼之外的例外,我想知道這是Microsoft.Speech DLL中的錯誤或我失去了一些東西

編輯1:

我的代碼發揮各地,並取得認可是異步如下:

sre.RecognizeAsync(RecognizeMode.Multiple); 

,而不是

sre.Recognize(); 
現在

,當我說「二十one'for例如它得到這個例外: base = {「rule」root「中的重複語義關鍵字'op1'。}}

我知道問題出在語法上,但我確實重複了'op1'。我在想什麼?

+1

看看TargetInvocationException的內部異常。這通常會告訴你另一方出了什麼問題。 – Casper

+0

我不能這樣做,因爲源代碼被鎖定..其Microsoft.Speech dll – Kasparov92

+1

我的意思是說,Exception類有一個名爲InnerExeception的屬性。當拋出TargetInvocationException時,另一方發生的異常通常會包含在該屬性中。因此,如果您在代碼中捕獲TargetInvocationException並在其中放置中斷點,則應該瞭解Microsoft.Speech中出現錯誤的一些線索。 – Casper

回答

1

void sre_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) 

結束通過承認自己 解析它的文字我分析識別的字符串:

e.Result 

而不是

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

的。語義對象拋出上面提到的異常。

我真的很想知道解決方案,如果有人有經驗

+0

你在使用替代品嗎?因爲當我使用語義結構時我有同樣的錯誤,並且我嘗試迭代候選項。它似乎是由一個異常引起的,當它在嘗試添加已存在於詞典中的語義結果鍵時進行替換時。 – Bruno

相關問題