如何在类中异步执行特定代码部分

时间:2013-04-14 20:17:29

标签: c# wpf asynchronous speech-recognition

我正在创建一个语音识别引擎,它将响应用户命令。我创建了一个按钮,根据用户的便利启用和禁用语音识别。我使用了Dispose()语音引擎来禁用语音识别。代码

private  void button1_Click(object sender, RoutedEventArgs e)
    {
        engineOn = !engineOn;
        if (engineOn)
        {
            speechEngine = speech.createSpeechEngine();     //speech is a class that creates and returns a new speech engine.
            speechEngine.AudioLevelUpdated += new EventHandler<AudioLevelUpdatedEventArgs>(speechEngine_AudioLevelUpdated);
            // use the system's default microphone
            speechEngine.SetInputToDefaultAudioDevice();
            speechEngine.LoadGrammar(new DictationGrammar());

            // start listening
            speechEngine.RecognizeAsync(RecognizeMode.Multiple);
        }
        else
        {
             SpeechClass.myEngine.Dispose();
        }

    }

但语音对象的处理需要时间。如何异步进行? 有没有其他方法可以打开和关闭语音识别?提前谢谢。

1 个答案:

答案 0 :(得分:0)

您只需使用RecogniseAsync / RecogniseAsyncStop将其关闭再打开:

http://msdn.microsoft.com/en-us/library/system.speech.recognition.speechrecognitionengine.aspx

或者,你可以尝试加载一个空的语法列表,所以基本上kinect没有什么可以听的。

此外,除非您不再想要使用(例如,当应用程序关闭时),否则我将完全避免处置该对象。处理对象(特别是speechrecognitionengine)会产生很大的开销,然后再重新创建它。