程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> winform-引用.net中的System.speech包,但是在程序運行時報錯。

winform-引用.net中的System.speech包,但是在程序運行時報錯。

編輯:編程綜合問答
引用.net中的System.speech包,但是在程序運行時報錯。

C# Winform項目中,利用Windows類庫,引用.net中的System.speech語音控制包。
在程序運行執行到"SRE.SetInputToDefaultAudioDevice();"報錯,提示“值不在預期的范圍內。”。
但是將工程中Program.cs文件的Main()方法上面的[STAThread] 這個關鍵字去掉,程序正常運行。但是將[STAThread]去掉會導致本工程中其它窗體的運行出現異常,有部分功能不能正常運行。

請問各位,在Program.cs文件的Main()方法上面的[STAThread] 這個關鍵字在不去掉的情況下,能夠讓程序正常的運行,不報運行的錯誤。

語音代碼如下:
private SpeechRecognitionEngine SRE = new SpeechRecognitionEngine();

private void Form1_Load(object sender, EventArgs e)
{
SRE.SetInputToDefaultAudioDevice(); //在Program.cs文件的Main()方法上面的[STAThread] 這個關鍵字不去掉的情況下,執行到這報"值不在預期的范圍內。"這個錯誤;
GrammarBuilder GB = new GrammarBuilder();
GB.Append("選擇");
GB.Append(new Choices(new string[] { "紅色", "綠色" }));
Grammar G = new Grammar(GB);
G.SpeechRecognized += new EventHandler(G_SpeechRecognized);
SRE.LoadGrammar(G);
SRE.RecognizeAsync(RecognizeMode.Multiple);

    }

void G_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
//Text = e.Result.Text;
switch (e.Result.Text)
{
case "選擇紅色":
BackColor = Color.Red;
break;
case "選擇綠色":
BackColor = Color.Green;
break;
}
}

最佳回答:


[STAThread] -- 單線程標志。
改用[MTAThread] -- 多線程標志試試。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved