语音识别识别keydown上的异步

时间:2014-08-30 08:04:57

标签: c#

我试图让我的程序听我说只有当我按下shift键所谓的按键通话,我试着使用下面的代码但是当按下键的时间超过1-2秒我得到以下错误:

未处理的类型' System.InvalidOperationException'发生在System.Speech.dll中 附加信息:识别器识别时无法执行此操作。

以下是代码的一部分:

    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;
        }
    }

1 个答案:

答案 0 :(得分:0)

按下按钮时会重复调用Form1_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;
        }
    }