C# 语音识别基于键控的异步识别

C# 语音识别基于键控的异步识别,c#,C#,我试图让我的程序只在按下shift键(即所谓的按键通话)时才听我说话,并且我尝试使用以下代码,但当按下该键超过1-2秒时,我出现以下错误: System.Speech.dll中发生“System.InvalidOperationException”类型的未处理异常 其他信息:识别器进行识别时,无法执行此操作。 以下是代码的一部分: private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.

我试图让我的程序只在按下shift键(即所谓的按键通话)时才听我说话,并且我尝试使用以下代码,但当按下该键超过1-2秒时,我出现以下错误:

System.Speech.dll中发生“System.InvalidOperationException”类型的未处理异常 其他信息:识别器进行识别时,无法执行此操作。

以下是代码的一部分:

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {

        if (e.KeyCode == Keys.ShiftKey)
        {
            label1.BackColor = Color.Green;
            label1.Text = "Speak";
            RecEngine.RecognizeAsync(RecognizeMode.Multiple);
            e.SuppressKeyPress = true;
        }

    }

    private void Form1_KeyUp(object sender, KeyEventArgs e)
    {

        if (e.KeyCode == Keys.ShiftKey)
        {
            label1.BackColor = Color.Yellow;
            label1.Text = "Ready";
            RecEngine.RecognizeAsyncStop();
            e.SuppressKeyPress = true;
        }
    }

按下按钮时,会重复调用
Form1\u KeyDown
功能

你需要检查按钮是否已经按下

    private bool recognitionRunning;

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {

        if (e.KeyCode == Keys.ShiftKey && !recognitionRunning)
        {
            label1.BackColor = Color.Green;
            label1.Text = "Speak";
            RecEngine.RecognizeAsync(RecognizeMode.Multiple);
            e.SuppressKeyPress = true;

            recognitionRunning = true;
        }

    }

    private void Form1_KeyUp(object sender, KeyEventArgs e)
    {

        if (e.KeyCode == Keys.ShiftKey)
        {
            label1.BackColor = Color.Yellow;
            label1.Text = "Ready";
            RecEngine.RecognizeAsyncStop();
            e.SuppressKeyPress = true;

            recognitionRunning = false;
        }
    }