首页 新闻 会员 周边

C#,SpeechSynthesizer的实现。

1
悬赏园豆:20 [已关闭问题] 关闭于 2012-06-11 16:28

要做一个小软件,在listbox中有数个问题,我双击其中一个问题,在textblock中会显示答案,同时我想让程序自动发出声音,声音为答案的内容,而且每双击一次声音都重新开始,不会出现几个声音共同播放。这里我用到tts。为了使ui线程不受影响,我重新起了一个线程,线程中实现声音的播放。

启动线程的代码如下:

 td = new Thread(SpeakAnswer);
                            td.Start();

speakAnswer函数的代码如下:

SpeechSynthesizer voice = null;
        public void SpeakAnswer()
        {

            if (voice != null)
            {
                voice.Dispose();
            }
            voice = new SpeechSynthesizer();
            voice.SelectVoiceByHints(VoiceGender.NotSet);
            voice.Volume = 100;
            voice.Rate = 1;
            voice.SpeakAsync(globalInfoDataInquiry.StrAnswerText.ToString());
            td.Abort();
        }

我现在遇到了问题,就是连续双击一个问题有时会出现问题:在voice.dispose()处显示“已关闭safe handle”,提示是“请确保在尝试使用某个资源之前尚未将其释放”。

我考虑我这是开启一个线程td,又在这个线程里开启了另一个线程voice。

本人的知识有限,请各位高手give me a hand。Thanks a lot!!!

< >
分享
所有回答(2)
0

voice.SpeakAsyncCancelAll()

在SpeakAsync前先调一下这个试试

ryowu | 园豆:202 (菜鸟二级) | 2013-10-16 10:48
0

你好,朋友,我也遇到这样的问题。你的是怎解决的?

Mark1997 | 园豆:147 (初学一级) | 2017-06-15 20:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册