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]--多线程标志试试。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。