初学C#,我想在工作线程里循环的读文本.代码如下.
 //读文本线程
  private void Threadreadblast()
 { 
 try
 {
   do
   {
      DotNetSpeech.SpeechVoiceSpeakFlags SSF =  DotNetSpeech.SpeechVoiceSpeakFlags.SVSFlagsAsync;
                    DotNetSpeech.SpVoice vo = new DotNetSpeech.SpVoiceClass();
      vo.Voice = vo.GetVoices("", "").Item(3);
      vo.Speak(txtblast, SSF);   //捕获到错误,弹出内存不够                
   }
   while (flag == true);
 }
 catch (System.Exception ec)
 {
 MessageBox.Show(ec.ToString(), "SpeechApp", MessageBoxButtons.OK,  System.Windows.Forms.MessageBoxIcon.Error);
 }         
 }
运行着老是弹出错误.我也觉得这样不对,还没speek完就进入下一次循环了.肯请高手不吝赐教,如何知道TTS已经转换完成,如何让语音循环播放.我只有几十分的家当,全给了,很珍贵的.

解决方案 »

  1.   

    vo.Speak(txtblast, SSF); 
    感觉在这后面要进行阻塞,你可以使用自动锁来实现
      

  2.   

    Speak方法只是将需要朗读的文本添加到执行队列中,朗读本身是异步执行的。LZ的代码明显是不管前一遍是否读完都在不断的添加,哪有不溢出道理。应该在SpVoice.Speak()之后加一句SpVoice.WaitUntilDone(),应该就可以吧。
      

  3.   

    我还想在另外一个线程中实现,播放的文字以走马灯的效果显示.如果lock了应该就不能实现了.我还发现一个问题,即使不lock,一边播放文字一边读,很卡,有时就中断了.郁闷呀.
      

  4.   

    SpVoice.WaitUntilDone(),WaitUntilDone要限定播放的时间,但我不知道需要播放多久,请问
    如何限定时间.
      

  5.   

    SpVoice.WaitUntilDone(),WaitUntilDone 用这是是对的.tts自动测时间