我正在尝试使用SpeakAsync()方法来讲一些文字。但是,在我调用Speak()之前,它不会开始说话。我不想打电话给Speak()。如果从此代码中删除Speak()方法,则根本不会调用任何内容:
using (SpeechSynthesizer synth = new SpeechSynthesizer())
{
synth.SelectVoice("ScanSoft Emily_Dri20_22kHz");
synth.Rate = 10;
synth.Volume = 100;
synth.SpeakAsync("oh, i'm a lumberjack and i'm okay! I sleep all night and I work all day!");
synth.SpeakAsync("If he was dying he wouldn't bother writing ah! He'd just say it!");
synth.Speak("i don't want to go on the cart.");
synth.SpeakAsync("We don't have a lord. We're an anarcho-syndicalist commune.");
synth.SpeakAsync("If you do not show us the grail, we shall take your castle by force!");
synth.Speak("what do you mean, an african swallow or a european swallow?");
更新:
似乎其他人遇到此问题,但尚未找到解决方案:
答案 0 :(得分:5)
这是因为Speak
是阻止程序运行的阻塞调用。由于您将此作为控制台应用程序运行,因此在代码末尾添加Console.ReadKey();
以确保应用程序保持运行直到用户按下某个键。
否则,主线程将退出,因为SpeakAsync
会立即返回,因此您的程序将飞过所有这些行,然后退出,这就是您没有听到任何内容的原因。
根据评论更新 -
using
块几乎立即处理SpeechSynthesizer
,这就是为什么没有任何东西可以被听到的原因。您可以在Console.ReadKey();
块的右大括号之前放置using
,也可以删除using
块并稍后手动处理它。