利用微软软件语音识别类库System.Speech.Recognition,无法异步调用识别引擎。

sxl_88 2015-07-14 03:49:38
C# Winform项目中,利用微软语音识别类库System.Speech.Recognition,可以正常识别语音,并异步调用语音的识别引擎。
目前遇到的问题是,在项目中有一个“视频监控”栏目。在“视频监控”正常运行的情况下,如果通过语音讲话就无法正常识别语音且不执行异步调用语音的识别引擎。

请问,如何实现在“视频监控”正常运行的情况下,可以正常识别语音,并异步调用语音的识别引擎。请帮忙看看怎么修改下面的代码:


代码:

private void FrmApp_Load(object sender, EventArgs e)
{

this.Hide();

TheadPackage();

Thread m_trdSpeech = new Thread(doSpeechWork);//创建"语音识别"线程
m_trdSpeech.Start();


}


void TheadPackage()
{
Thread t_thread = new Thread(threadPro);//创建运行"视频监控"线程
t_thread.Start();
}

void threadPro()
{
try
{
MethodInvoker MethInvo = new MethodInvoker(ShowFrom);
BeginInvoke(MethInvo);
}
catch (Exception ex)
{
LLog.Log(string.Format("threadPro:{0}\terrmsg:{1}", this.ToString(), ex.Message));
}
}


void ShowFrom()
{
frmmontor = new FrmMonitor(); //启动运行"视频监控"的窗体
frmmontor.Show();
}


//语音识别
void doSpeechWork()
{
try
{
SRE.SetInputToDefaultAudioDevice();
GrammarBuilder GB = new GrammarBuilder();
GB.Append("选择");
GB.Append(new Choices(new string[] { "红色", "绿色" }));
Grammar G = new Grammar(GB);
G.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(G_SpeechRecognized);
SRE.LoadGrammar(G);
SRE.RecognizeAsync(RecognizeMode.Multiple); //<=======异步调用识别引擎,允许多次识别

}
catch (Exception ex)
{
LLog.Log(string.Format("threadPro:{0}\terrmsg:{1}", this.ToString(), ex.Message));
}
}

//目前的问题是,在运行“视频监控”的情况下,无法异步调用识别引擎这个方法
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;
}
}
...全文
738 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
exception92 2015-07-15
  • 打赏
  • 举报
回复
语音识别 不需要单独开线程的吧
sxl_88 2015-07-14
  • 打赏
  • 举报
回复
请问各位,是不是在“视频监控”运行下,无法言识别语音呀。请各位帮忙看看,谢谢!

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧