我有一个 void 方法(希望我说得对),它初始化语音识别引擎、语法和一些用于获取命令的文本文件的路径。现在我已经将代码放在一个 void 方法中,以便我可以在 From_Load 事件中调用它,但是由于某种原因,如果 PC 进入睡眠状态然后再备份,语音识别将不起作用,我设置了一个计时器来调用方法每十分钟。现在语音识别和语法每十分钟重新初始化一次,但我不确定它是初始化两次还是第一个自动终止,如果没有,是否可以这样做? public void InitGrammar() { #region Recengine, grammar, commands try { SpeechRecognitionEngine recEngine = new SpeechRecognitionEngine(); //Grammar DGrammar = new DictationGrammar(); //recEngine.LoadGrammar(DGrammar); Choices commands = new Choices(); Choices Ecommands = new Choices(); Ecommands.Add(new string[] { "Emergency shutdown", "Reboot", "Abort", "Abort Abort" }); commands.Add(File.ReadAllLines(@"C:\Natalie\commands\commands.txt")); GrammarBuilder gBuilder = new GrammarBuilder(); gBuilder.Append(commands); Grammar grammar = new Grammar(gBuilder); synthesizer.SelectVoiceByHints(VoiceGender.Female); recEngine.LoadGrammarAsync(grammar); recEngine.SetInputToDefaultAudioDevice(); recEngine.SpeechRecognized += RecEngine_SpeechRecognized; recEngine.RecognizeAsync(RecognizeMode.Multiple); } catch (Exception exinit) { _Errorsound.Play(); MessageBox.Show(exinit.Message); } synthesizer.SelectVoiceByHints(VoiceGender.Female); #endregion }
1 回答
三国纷争
TA贡献1804条经验 获得超7个赞
由于措辞,这里有些混乱。在原来的方法调用以毫秒为单位几乎肯定完了,所以方法已被“终止”当你的计时器到期。您的代码中没有任何内容表明它正在阻塞(事件注册和“识别异步”特别提示了这一点)
的副作用仍然是方法的可能但是仍然(当然在这种情况下做的)。在重新运行初始化例程之前,您必须通过手动处置/取消注册等来处理此问题。
从概念的角度理解这一点非常重要,但@Heretic Monkey 对您的解决方案提出了一个很好的观点:
你真的应该在 Windows API 中添加一些钩子,并在计算机唤醒时重新初始化。否则,你就是在玩猜谜游戏。
- 1 回答
- 0 关注
- 159 浏览
添加回答
举报
0/150
提交
取消