在C#中同时说出和显示消息框

时间:2012-12-05 18:47:23

标签: c# speech-recognition

我正在尝试构建一个显示消息框的应用程序,以显示正在讲话的音素。问题是这些消息框在演讲结束后等待显示音素。我怎样才能同时做两件事?

void sre_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{  
    speech = new SpeechSynthesizer();      
    speech.SetOutputToDefaultAudioDevice();
    speech.SpeakAsync(e.Result.Text);
    speech.PhonemeReached += speech_PhonemeReached;
}
void speech_PhonemeReached(object sender, PhonemeReachedEventArgs e)
{
    if (new[] {"a͡i","o"}.Contains(e.Phoneme))
       MessageBox.Show(e.Phoneme);
}

我还在学习c#并且我不确定如何使用线程,但这是我的代码与语音识别器相关的部分:

Thread q = new Thread( ()=> sre.SpeechRecognized += (s, args) =>
    {
         foreach (RecognizedPhrase phrase in args.Result.Alternates)
         {
            if (phrase.Confidence > 0.9f)
                sre_SpeechRecognized(s, args);
         }
    });
q.Start();

希望有人能帮助我...

1 个答案:

答案 0 :(得分:1)

在它自己的线程中运行语音识别器,并使用Invoke在主线程上显示msg框。

void speech_PhonemeReached(object sender, PhonemeReachedEventArgs e)
{
    if (new[] {"a͡i","o"}.Contains(e.Phoneme))
       this.Invoke(new Action(() => { MessageBox.Show(this, e.Phoneme); }));
}