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] -- 多线程标志试试。

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

报告相同问题?

悬赏问题

  • ¥20 iqoo11 如何下载安装工程模式
  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?