要做一个小软件,在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!!!
voice.SpeakAsyncCancelAll()
在SpeakAsync前先调一下这个试试
你好,朋友,我也遇到这样的问题。你的是怎解决的?