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] -- 多線程標志試試。