2014-08-30 29 views
-1

我試圖讓我的程序聽我說,只有當我按下shift鍵,所謂的一鍵通,我試圖使用下面的代碼,但當按下按鍵時間更長,然後1-2秒我得到以下錯誤:語音識別在keydown上識別異步

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

回答

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