sxl_88 2015-07-07 02:22 采纳率: 50%
浏览 2644
已采纳

引用.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;
}
}

  • 写回答

1条回答

  • frank_20080215 2015-07-07 10:01
    关注

    [STAThread] -- 单线程标志。
    改用[MTAThread] -- 多线程标志试试。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 关于#python#的问题:自动化测试